web-dev-qa-db-fra.com

Impossible de ssh localhost dans un conteneur Docker en cours d'exécution

Je crée une image Docker pour une application qui nécessite de ssh dans localhost (c'est-à-dire ssh user @ localhost)

Je travaille sur une machine de bureau Ubuntu et j'ai commencé avec un conteneur ubuntu: 16.04 de base. Voici le contenu de mon 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

Ensuite, je construis ce conteneur en utilisant la commande:

docker build -t test-container .

Et exécutez-le en utilisant:

docker run -it test-container

Le conteneur s'ouvre avec l'invite suivante et les clés sont générées correctement pour activer ssh dans localhost:

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

Puis ssh dans localhost et accueilli par l'erreur:

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

Y a-t-il quelque chose que je fais mal ou des paramètres réseau supplémentaires qui doivent être configurés? Je veux juste ssh dans localhost dans le conteneur en cours d'exécution.

17
Akshay Elavia

Vous devez d'abord installer le serveur ssh dans le script de création d'image:

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

Ensuite, vous devez démarrer le serveur ssh:

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

ou probablement même dans les dernières lignes du Dockerfile (vous devez avoir un binaire instancié pour que le conteneur continue de fonctionner ...)

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

sur l'hôte que

# 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

13
Yordan Georgiev

Comme @ user2915097 l'a indiqué dans les commentaires OP, cela était dû à l'instance ssh dans le conteneur qui tentait de se connecter à l'hôte à l'aide d'IPv6. Forcer la connexion sur IPv4 à l'aide de -4 a résolu le problème.

$ docker run -it ubuntu ssh -4 user@hostname
3
sshow

Pour Docker Compose, j'ai pu ajouter ce qui suit à mon fichier . Yml:

network_mode: "Host"

Je crois que l'équivalent dans Docker est:

--net=Host

0
Gabriel Gates