Želim ssh ali bash v delujočo posodo docker. Oglejte si primer:
$ 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
zdaj želim dobiti nekaj takega (vstopite v delujočo posodo):
$ 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:/#
Uporabil sem Vagrant in bi rad dobil podobno obnašanje kot vagrant ssh
.
Odgovor je Dockerjev ukaz attach
. Tako bo za moj zgornji primer rešitev naslednja:
$ sudo docker attach 665b4a1e17b6 #by ID
or
$ sudo docker attach loving_heisenberg #by Name
$ root@665b4a1e17b6:/#
Za različico Docker 1.3 ali novejšo: Hvala uporabniku WiR3D, ki je predlagal drug način za pridobitev lupine vsebnika. Če uporabimo attach
, lahko uporabimo samo eno instanco lupine. Če torej želimo odpreti nov terminal z novo instanco lupine vsebnika, moramo zagnati naslednje:
$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID
ali
$ sudo docker exec -i -t loving_heisenberg /bin/bash #by Name
$ root@665b4a1e17b6:/#
Od različice Docker 1.3 naprej:
docker exec -it <containerIdOrName> bash
Če je bil vsebnik Docker zagnan z ukazom /bin/bash
, lahko do njega dostopate z ukazom attach
. Če ne, morate ukaz za ustvarjanje primerka Bash znotraj vsebnika izvesti z ukazom exec
.
Prav tako lahko zaključite Bash, ne da bi ga pustili delovati v nepridipravskem procesu:
exit
Ja, tako preprosto je.