Unable to ssh localhost within a running Docker container

16,799

Solution 1

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

Solution 2

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

Solution 3

For Docker Compose I was able to add the following to my .yml file:

network_mode: "host"

I believe the equivalent in Docker is:

--net=host

Documentation:

https://docs.docker.com/compose/compose-file/compose-file-v3/#network_mode

https://docs.docker.com/network/#network-drivers

host: For standalone containers, remove network isolation between the container and the Docker host, and use the host’s networking directly. See use the host network.

Share:
16,799
Akshay Elavia
Author by

Akshay Elavia

Updated on July 10, 2022

Comments

  • Akshay Elavia
    Akshay Elavia almost 2 years

    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.