Elkezdtem dolgozni a Dockerrel. A WordPress alapképet és a docker-compose-t használom.
I'm megpróbálok ssh-t az egyik konténerbe, hogy megvizsgáljam a kezdeti építés során létrehozott fájlokat / könyvtárakat. Megpróbáltam a docker-compose run containername ls -la
futtatását, de ez nem csinált semmit. Még ha működne is, inkább egy konzolra vágyom, ahol átnézhetem a könyvtárstruktúrát, minthogy egyetlen parancsot futtassak. Mi a helyes módja ennek a Dockerrel?
A docker attach
segítségével csatlakozhatsz a Docker konténerhez, de ez nem ugyanaz, mint az ssh
. Ha például a konténeredben egy webkiszolgáló fut, a docker attach
valószínűleg a webkiszolgáló folyamat stdout-jára fog csatlakozni. Nem feltétlenül ad neked egy shell-t.
Valószínűleg a docker exec
parancs az, amit keresel; ez lehetővé teszi tetszőleges parancsok futtatását egy meglévő konténeren belül. Például:
docker exec -it <mycontainer> bash
Természetesen bármilyen parancsot is futtatsz, annak léteznie kell a konténer fájlrendszerében.
A fenti parancsban a <mycontainer>
a célkonténer neve vagy azonosítója. Nem számít, hogy a docker compose
-t használod-e vagy sem; csak futtasd a docker ps
-t, és használd az ID-t (az első oszlopban megjelenő hexadecimális karakterlánc) vagy a nevet (az utolsó oszlopban megjelenő). Pl:
$ docker ps
d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
Futtathatom:
$ 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
Ugyanezt el tudom érni a következő futtatással is:
$ docker exec -it d2d4a89aaee9 ip addr
Hasonlóképpen elindíthatok egy héjat a konténerben;
$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$
A docker exec
biztosan megoldás lesz. Egy egyszerű módja a kérdéseddel való munkának az, hogy a Dockeren belüli könyvtárat a helyi rendszer's könyvtárba csatolod.
Így azonnal megtekintheti a helyi elérési útvonalban bekövetkezett változásokat.
docker run -v /Users/<path>:/<container path>
Egy másik lehetőség az nsenter használata.
PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid