Docker ile çalışmaya başlıyorum. WordPress temel görüntüsünü ve docker-compose kullanıyorum.
İlk derleme sırasında oluşturulan dosyaları/dizinleri incelemek için konteynerlerden birine ssh ile girmeye çalışıyorum. Docker-compose run containername ls -la` komutunu çalıştırmayı denedim, ancak bu hiçbir şey yapmadı. Yapsa bile, tek bir komut çalıştırmak yerine dizin yapısını gezebileceğim bir konsola sahip olmayı tercih ederim. Bunu Docker ile yapmanın doğru yolu nedir?
Docker attachDocker konteynerinize bağlanmanıza izin verir, ancak bu gerçekten
sshile aynı şey değildir. Örneğin, konteyneriniz bir web sunucusu çalıştırıyorsa,
docker attach` muhtemelen sizi web sunucusu işleminin stdout'una bağlayacaktır. Size mutlaka bir kabuk vermeyecektir.
Muhtemelen aradığınız şey docker exec
komutudur; bu, mevcut bir konteyner içinde rastgele komutlar çalıştırmanıza izin verecektir. Örneğin:
docker exec -it <mycontainer> bash
Elbette, çalıştırdığınız komut konteyner dosya sisteminde mevcut olmalıdır.
Yukarıdaki komutta <mycontainer>
hedef konteynerin adı veya ID'sidir. Docker compose kullanıp kullanmamanız önemli değildir; sadece docker ps
komutunu çalıştırın ve ID'yi (ilk sütunda görüntülenen onaltılık bir dize) veya adı (son sütunda görüntülenen) kullanın. Örneğin, verilen:
$ docker ps
d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
Koşabilirim:
$ 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
Aynı şeyi koşarak da başarabilirim:
$ docker exec -it d2d4a89aaee9 ip addr
Benzer şekilde, konteynerde bir kabuk başlatabilirim;
$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$
'docker exec' kesinlikle bir çözüm olacaktır. Sorduğunuz soruyla çalışmanın kolay bir yolu Docker içindeki dizini yerel sistem dizinine bağlamaktır.
Böylece yerel yoldaki değişiklikleri anında görüntüleyebilirsiniz.
docker run -v /Users/<path>:/<container path>
Başka bir seçenek de nsenter kullanmaktır.
PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid