docker attach
ti permetterà di connetterti al tuo contenitore Docker, ma non è esattamente la stessa cosa di ssh
. Se il tuo contenitore sta eseguendo un server web, ad esempio, docker attach
probabilmente ti collegherà allo stdout del processo del server web. Non ti darà necessariamente un guscio.
Il docker exec
comando è probabilmente quello che stai cercando; questo ti consentirà di eseguire comandi arbitrari all'interno di un contenitore esistente. Per esempio:
docker exec -it <mycontainer> bash
Ovviamente, qualunque comando tu stia eseguendo deve esistere nel filesystem container.
Nel comando sopra <mycontainer>
è il nome o l'ID del contenitore di destinazione. Non importa se stai usando o meno docker compose
; basta eseguire docker ps
e utilizzare l'ID (una stringa esadecimale visualizzata nella prima colonna) o il nome (visualizzato nella colonna finale). Ad esempio, dato:
$ docker ps
d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
Posso correre:
$ 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
Potrei realizzare la stessa cosa eseguendo:
$ docker exec -it d2d4a89aaee9 ip addr
Allo stesso modo, potrei avviare una shell nel contenitore;
$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$