Unable to ssh localhost within a running Docker container

Viewed 19243

I'm building a Docker image for an application which requires to ssh into localhost (i.e ssh user@localhost)

I'm working on a Ubuntu desktop machine and started with a basic ubuntu:16.04 container. Following is the content of my Dockerfile:

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y \
        openjdk-8-jdk \
        ssh && \
        groupadd -r custom_group && useradd -r -g custom_group -m user1

USER user1

RUN ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" && \
        cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Then I build this container using the command:

docker build -t test-container .

And run it using:

docker run -it test-container

The container opens with the following prompt and the keys are generated correctly to enable ssh into localhost:

user1@0531c0f71e0a:/$ 
user1@0531c0f71e0a:/$ cd ~/.ssh/
user1@0531c0f71e0a:~/.ssh$ ls
authorized_keys  id_rsa  id_rsa.pub

Then ssh into localhost and greeted by the error:

user1@0531c0f71e0a:~$ ssh user1@localhost
ssh: connect to host localhost port 22: Cannot assign requested address

Is there anything I'm doing wrong or any additional network settings that needs to be configured? I just want to ssh into localhost within the running container.

3 Answers

First you need to install the ssh server in the image building script:

  • RUN sudo apt-get install -y openssh-server

Then you need to start the ssh server:

  • RUN sudo /etc/init.d/ssh start

or probably even in the last lines of the Dockerfile ( you must have one binary instantiated to keep the container running ... )

 USER root
 CMD [ "sh", "/etc/init.d/ssh", "start"]

on the host than

# init a container from an the image
run -d --name my-ssh-container-name-01 \
    -v /opt/local/dir:/opt/container/dir my-image-01

As @user2915097 stated in the OP comments, this was due to the ssh instance in the container was attempting to connect to the host using IPv6. Forcing connection over IPv4 using -4 solved the issue.

$ docker run -it ubuntu ssh -4 user@hostname
Related