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 exec
prend 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