Chci ssh nebo bash do běžícího kontejneru docker. Podívejte se prosím na příklad:
$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
Nyní chci získat něco takového (přejít do běžícího kontejneru):
$ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ root@665b4a1e17b6:/#
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#
Použil jsem Vagrant a rád bych dosáhl podobného chování jako vagrant ssh
.
Odpovědí je příkaz attach
společnosti Docker. Takže pro můj příklad výše bude řešení následující:
$ sudo docker attach 665b4a1e17b6 #by ID
or
$ sudo docker attach loving_heisenberg #by Name
$ root@665b4a1e17b6:/#
Pro Docker verze 1.3 nebo novější: Děkujeme uživateli WiR3D, který navrhl jiný způsob, jak získat shell kontejneru. Pokud použijeme attach
, můžeme použít pouze jednu instanci shellu. Pokud tedy chceme otevřít nový terminál s novou instancí kontejnerového'shellu, stačí spustit následující příkaz:
$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID
nebo
$ sudo docker exec -i -t loving_heisenberg /bin/bash #by Name
$ root@665b4a1e17b6:/#
Od verze Docker 1.3:
docker exec -it <containerIdOrName> bash
Pokud byl kontejner Docker spuštěn pomocí příkazu /bin/bash
, můžete k němu přistupovat pomocí příkazu attach
. Pokud ne, je třeba provést příkaz pro vytvoření instance Bash uvnitř kontejneru pomocí exec
.
Také pro ukončení Bash, aniž byste nechali Bash běžet v nepovoleném procesu:
exit
Ano, je to tak jednoduché.