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.
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
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
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