Jak dostat bash nebo ssh do běžícího kontejneru v režimu na pozadí?

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.

Řešení

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:/#
Komentáře (13)

Od verze Docker 1.3:

docker exec -it  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é.

Komentáře (11)

Zkuste toto:

sudo docker run -i -t webserver /bin/bash

Zdroj: https://docs.docker.com/articles/basics/#running-an-interactive-shell

Komentáře (2)