docker attach
pozwoli ci połączyć się z kontenerem Docker, ale tak naprawdę to nie to samo, co ssh
. Jeśli pojemnik ma serwera WWW, na przykład, docker attach
będzie prawdopodobnie połączyć Cię do stdout procesu serwera WWW. To niekoniecznie da ci powłokę.
docker exec
Polecenia jest chyba to, czego szukasz; pozwoli ci to uruchomić dowolne polecenia w istniejącym kontenerze. Na przykład:
docker exec -it <mycontainer> bash
Oczywiście każde uruchomione polecenie musi istnieć w systemie plików kontenera.
W powyższym poleceniu <mycontainer>
jest nazwa lub identyfikator kontenera docelowego. Nie ma znaczenia, czy używasz docker compose
; po prostu uruchom docker ps
i użyj albo ID (ciąg szesnastkowy wyświetlany w pierwszej kolumnie), albo nazwę (wyświetlany w ostatniej kolumnie). Na przykład biorąc pod uwagę:
$ docker ps
d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
Mogę biec:
$ 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
Mogłem osiągnąć to samo, uruchamiając:
$ docker exec -it d2d4a89aaee9 ip addr
Podobnie mógłbym uruchomić powłokę w pojemniku;
$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$