Kā iekļūt Docker konteinera čaulā?

Es'sāku strādāt ar Docker. Es izmantoju WordPress bāzes attēlu un docker-compose.

Es mēģinu ieiet ar ssh vienā no konteineriem, lai pārbaudītu sākotnējās izveides laikā izveidotos failus/diirektorijus. Es mēģināju palaist docker-compose run containername ls -la, bet tas neko nedarīja. Pat ja tas to izdarītu, es gribētu, lai man būtu konsole, kurā es varu pārlūkot direktoriju struktūru, nevis palaist vienu komandu. Kāds ir pareizais veids, kā to izdarīt ar Docker?

Risinājums

docker attach ļaus jums izveidot savienojumu ar jūsu Docker konteineru, bet tas nav tas pats, kas ssh. Ja jūsu konteinerā darbojas, piemēram, tīmekļa serveris, docker attach, iespējams, pieslēgs jūs tīmekļa servera procesa stdout. Tas ne vienmēr sniegs jums čaulu.

Iespējams, ka jūs meklējat tieši docker exec komandu; tā ļaus jums palaist patvaļīgas komandas esošā konteinerā. Piemēram:

docker exec -it  bash

Protams, jebkurai komandai, ko palaižat, ir jāeksistē konteinera failu sistēmā.

Iepriekš minētajā komandā `ir mērķa konteinera nosaukums vai ID. Nav nozīmes, vai jūs izmantojatdocker compose; vienkārši palaidietdocker ps` un izmantojiet ID (sešciparu virkne, kas parādās pirmajā slejā) vai nosaukumu (parādās pēdējā slejā). Piemēram, dots:

$ docker ps
d2d4a89aaee9        larsks/mini-httpd   "mini_httpd -d /cont   7 days ago          Up 7 days                               web                 

Es varu palaist:

$ docker exec -it web ip addr
1: lo:  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:  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

To pašu es varētu izdarīt, palaižot:

$ docker exec -it d2d4a89aaee9 ip addr

Līdzīgi es varētu palaist čaulu konteinerā;

$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$
Komentāri (8)

docker exec noteikti būs risinājums. Vienkāršs veids, kā risināt jūsu uzdoto jautājumu, ir montēt direktoriju Docker iekšienē uz vietējās sistēmas direktoriju.

Lai jūs varētu uzreiz apskatīt izmaiņas lokālajā ceļā.


docker run -v /Users/<path>:/
Komentāri (2)

Cita iespēja ir izmantot nsenter.

PID=$(docker inspect --format {{.State.Pid}} )
nsenter --target $PID --mount --uts --ipc --net --pid
Komentāri (4)