Je veux ssh ou bash dans un conteneur docker en cours d'exécution. Veuillez voir l'exemple:
$ sudo docker run -d webserverwebserver is clean image from ubuntu:14.04$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
Maintenant, je veux obtenir quelque chose comme ça (aller dans le conteneur en cours d'exécution):
Pour Docker version 1.3 ou ultérieure: Merci à l'utilisateur WiR3D qui a suggéré une autre façon d'obtenir la coquille d'un conteneur. Si nous utilisons attach nous ne pouvons utiliser qu'une seule instance du shell. Donc, si nous voulons ouvrir un nouveau terminal avec une nouvelle instance du shell d'un conteneur, il nous suffit d'exécuter ce qui suit:
$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID
Fondamentalement, si le conteneur Docker a été démarré en utilisant le /bin/bash commande vous pouvez y accéder en utilisant attach. Sinon, vous devez exécuter la commande pour créer une instance Bash à l'intérieur du conteneur en utilisant exec.
Aussi pour quitter Bash sans laisser Bash s'exécuter dans un processus malveillant:
Bien que l'auteur de la question ait spécifiquement déclaré qu'il était intéressé par un conteneur en cours d'exécution, il convient également de noter que si le conteneur n'est pas en cours d'exécution, mais que vous souhaitez l'exécuter pour fouiller, vous pouvez exécuter:
Sur la base de la réponse de @Timur, j'ai créé ce qui suit script pratique
Configuration
Mettre docker-ssh fichier dans votre $PATH avec le contenu suivant
#!/bin/bash -xe# docker container id or name might be given as a parameterCONTAINER=$1if [[ "$CONTAINER" == "" ]]; then # if no id given simply just connect to the first running container CONTAINER=$(docker ps | grep -Eo "^[0-9a-z]{8,}\b")fi# start an interactive bash inside the container# note some containers don't have bash, then try: ash (alpine), or simply sh# the -l at the end stands for login shell that reads profile files (read man)docker exec -i -t $CONTAINER bash -l
Note: Certains conteneurs ne contiennent pas bash, mais ash, sh etc. Dans ces cas-là bash sera remplacé dans le script ci-dessus.
Utilisation
Si vous n'avez qu'une seule instance en cours d'exécution, exécutez simplement
$> docker-ssh
Sinon, fournissez - lui un paramètre docker id que vous obtenez à partir de docker ps (première col)
J'ai créé un serveur SSH conteneurisé qui fournit des fonctionnalités SSH à tout conteneur en cours d'exécution. 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émarrerait un deuxième conteneur qui fournirait SSH pour le premier conteneur.
Vous pouvez également donner au conteneur Docker une adresse IP routable avec Pipework, puis SSH dans 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 finira par le rendre plus "portable" sur tous les systèmes et versions.
Parfois, il sera pratique de pouvoir ssh dans un conteneur Docker, en particulier pendant le développement. L'image Docker suivante permet de ssh dans un conteneur à l'aide d'une clé privée:
Notez que l’utilisation de SSH pour bash dans un conteneur en cours d’exécution est une mauvaise pratique-voir justification ici. `sudo docker exec-i-t container-name / bin / bash ’ est une solution.