970 votes

Comment obtenir bash ou ssh dans un conteneur en cours d'exécution en mode arrière-plan ?

Je veux m'introduire par ssh ou bash dans un conteneur docker en cours d'exécution. Veuillez voir l'exemple :

$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID  IMAGE            COMMAND    CREATED STATUS  PORTS          NAMES
665b4a1e17b6  webserver:latest /bin/bash  ...     ...     22/tcp, 80/tcp loving_heisenberg 

Maintenant, je veux obtenir quelque chose comme ceci (aller dans le conteneur en cours d'exécution) :

$ sudo docker run -t -i webserver (ou peut-être 665b4a1e17b6 à la place)
$ root@665b4a1e17b6:/#

Cependant, lorsque j'exécute la ligne ci-dessus, j'obtiens un nouveau CONTAINER ID :

$ root@42f1e37bd0e5:/#

J'ai utilisé Vagrant et j'aimerais obtenir un comportement similaire à celui de vagrant ssh .

18voto

laktak Points 540

Si bash n'est pas installé dans votre conteneur, vous pouvez essayer sh :

docker exec -it CONTAINER /bin/sh

Ou cherchez d'abord les shells dans /bin :

docker export CONTAINER|tar -t|egrep ^bin/

9voto

Jeroen Peeters Points 199

J'ai créé un serveur SSH conteneurisé qui fournit des capacités SSH à tout conteneur en fonctionnement. Vous n'avez pas besoin de changer votre conteneur. La seule exigence est que le conteneur ait bash.

Si vous avez un conteneur avec le nom 'web-server1'. La commande docker run suivante démarrera un second conteneur qui fournira SSH au premier conteneur.

docker run -ti --name sshd-web-server1 -e CONTAINER=web-server1 -p 2222:22 \
-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker \
jeroenpeeters/docker-ssh

Pour plus d'informations, consultez le site https://github.com/jeroenpeeters/docker-ssh

6voto

Richard Points 61

@jpetazzo a un excellent article sur ce sujet . La réponse courte serait d'utiliser nsenter :

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid

P.S. : N'oubliez pas de consulter la discussion dans les commentaires du billet...

Cheers

4voto

radriaanse Points 471

Vous pouvez également donner au conteneur Docker une adresse IP routable avec Pipework, puis vous connecter en SSH à la machine avec cette nouvelle adresse IP.

Ce sera plus "traditionnel" (ssh), au lieu d'utiliser une commande spécifique à l'application comme docker attach et le rendra éventuellement plus "portable" entre les systèmes et les versions.

3voto

Dev Khadka Points 131

Il est parfois pratique de pouvoir se connecter par ssh à un conteneur Docker, notamment pendant le développement. L'image Docker suivante permet de se connecter à un conteneur en utilisant une clé privée :

UbuntuWithSSH-Docker

L'essentiel du fichier Docker est le suivant https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X