Question Comment puis-je entrer dans un conteneur Docker?


Je commence à travailler avec Docker. J'utilise l'image de base WordPress et docker-compose.

J'essaye de ssh dans un des conteneurs pour inspecter les fichiers / répertoires qui ont été créés pendant la construction initiale. J'ai essayé de courir docker-compose run containername ls -la, mais ça n'a rien fait. Même si c'était le cas, je préfèrerais avoir une console où je peux traverser la structure du répertoire, plutôt que d'exécuter une seule commande. Quelle est la bonne façon de faire cela avec Docker?


562
2018-05-11 16:12


origine


Réponses:


docker attach vous permettra de vous connecter à votre conteneur Docker, mais ce n'est pas vraiment la même chose que ssh. Si votre conteneur exécute un serveur Web, par exemple, docker attach vous connectera probablement au stdout du processus du serveur Web. Cela ne vous donnera pas nécessairement un obus.

le docker exec commande est probablement ce que vous cherchez; Cela vous permettra d'exécuter des commandes arbitraires dans un conteneur existant. Par exemple:

docker exec -it <mycontainer> bash

Bien sûr, la commande que vous exécutez doit exister dans le système de fichiers du conteneur.

Dans la commande ci-dessus <mycontainer> est le nom ou l'identifiant du conteneur cible. Peu importe que vous utilisiez ou non docker compose; juste courir docker ps et utilisez l'ID (une chaîne hexadécimale affichée dans la première colonne) ou le nom (affiché dans la dernière colonne). Par exemple, donné:

$ docker ps
d2d4a89aaee9        larsks/mini-httpd   "mini_httpd -d /cont   7 days ago          Up 7 days                               web                 

Je peux courir:

$ docker exec -it web ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
18: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:3/64 scope link 
       valid_lft forever preferred_lft forever

Je pourrais accomplir la même chose en courant:

$ docker exec -it d2d4a89aaee9 ip addr

De même, je pourrais commencer une coquille dans le récipient;

$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$

913
2018-05-11 16:44



Pour bash dans un conteneur en cours d'exécution, tapez ceci:

docker exec -t -i container_name /bin/bash

178
2017-10-11 01:34



Disons, pour des raisons qui vous sont propres, que vous voulez vraiment utiliser SSH. Cela prend quelques étapes, mais cela peut être fait. Voici les commandes que vous exécuterez dans le conteneur pour le configurer ...

apt-get update
apt-get install openssh-server

mkdir /var/run/sshd
chmod 0755 /var/run/sshd
/usr/sbin/sshd

useradd --create-home --shell /bin/bash --groups sudo username ## includes 'sudo'
passwd username ## Enter a password

apt-get install x11-apps ## X11 demo applications (optional)
ifconfig | awk '/inet addr/{print substr($2,6)}' ## Display IP address (optional)

Maintenant, vous pouvez même exécuter des applications graphiques (si elles sont installées dans le conteneur) en utilisant le transfert X11 vers le client SSH:

ssh -X username@IPADDRESS
xeyes ## run an X11 demo app in the client

Voici quelques ressources connexes:


55
2018-05-16 03:36



Remarquer: cette réponse promeut un outil que j'ai écrit.

J'ai créé un serveur SSH conteneurisé que vous pouvez coller à n'importe quel conteneur en cours d'exécution. De cette façon, vous pouvez créer des compositions avec chaque conteneur. La seule exigence est que le conteneur a Bash.

L'exemple suivant démarre un serveur SSH attaché à un conteneur avec le nom 'my-container'.

docker run -d -p 2222:22 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
  jeroenpeeters/docker-ssh

ssh localhost -p 2222

Lorsque vous vous connectez à ce service SSH (avec votre client SSH de votre choix) une session Bash sera démarrée dans le conteneur avec le nom 'my-container'.

Pour plus de pointeurs et de documentation, voir: https://github.com/jeroenpeeters/docker-ssh


13
2017-10-03 20:56



SSH dans un conteneur Docker en utilisant cette commande:

sudo docker exec -i -t (container ID) bash

11
2017-11-18 09:43



Si vous êtes à la recherche d'une réponse spécifique au docker-composer comme je l'étais, cela permet un accès facile sans avoir à rechercher l'ID de conteneur généré.

docker-compose execprend le nom du service selon votre docker-compose.yml fichier.

Donc, pour obtenir un shell bash pour votre service 'web', vous pouvez faire:

$ docker-compose exec web bash

9
2017-11-24 09:21



Si vous utilisez Docker sous Windows et que vous voulez obtenir un accès shell à un conteneur, utilisez ceci:

winpty docker exec -it <container_id> sh

Très probablement, vous avez déjà Git Bash installée. Si ce n'est pas le cas, assurez-vous de l'installer.


5
2018-02-09 09:04



docker attach <container name/id here>

L'autre façon, bien qu'il y ait un danger à utiliser est attach, mais si vous ctrl-c pour quitter la session, vous arrêterez également le conteneur. - Si vous voulez juste voir ce qui se passe, utilisez docker logs -f 

:~$ docker attach --help
Usage:  docker attach [OPTIONS] CONTAINER

Attach to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a container
      --help                 Print usage
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process (default true)

4
2018-02-02 18:03