Jeg er begyndt at arbejde med Docker. I'm bruger WordPress-base image og docker-compose.
I'm forsøger at ssh ind i en af containerne for at inspicere de filer / mapper, der blev oprettet under den oprindelige build. Jeg forsøgte at køre docker-compose run containername ls -la
, men det gjorde ikke noget. Selv hvis det gjorde det, vil jeg hellere have en konsol, hvor jeg kan gennemgå mappestrukturen i stedet for at køre en enkelt kommando. Hvad er den rigtige måde at gøre dette med Docker på?
docker attach
giver dig mulighed for at oprette forbindelse til din Docker-container, men det er ikke det samme som ssh
. Hvis din container f.eks. kører en webserver, vil docker attach
sandsynligvis forbinde dig til stdout fra webserverprocessen. Det vil ikke nødvendigvis give dig en shell.
Kommandoen docker exec
er sandsynligvis det du leder efter; den vil lade dig køre vilkårlige kommandoer inde i en eksisterende container. For eksempel:
docker exec -it <mycontainer> bash
Selvfølgelig skal den kommando, du kører, eksistere i containerens filsystem.
I ovenstående kommando er <mycontainer>
navnet eller ID'et på målcontaineren. Det er ligegyldigt, om du bruger docker compose
eller ej. Du skal bare køre docker ps
og bruge enten ID'et (en hexadecimal streng, der vises i den første kolonne) eller navnet (der vises i den sidste kolonne). F.eks. givet:
$ docker ps
d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
kan jeg køre:
$ 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
Jeg kunne opnå det samme ved at køre:
$ docker exec -it d2d4a89aaee9 ip addr
På samme måde kunne jeg starte en shell i containeren;
$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$
docker exec
vil helt sikkert være en løsning. En nem måde at arbejde med det spørgsmål, du stillede, er ved at mounte mappen i Docker til det lokale system's mappe.
Så du kan se ændringerne i den lokale sti med det samme.
docker run -v /Users/<path>:/<container path>
En anden mulighed er at bruge nsenter.
PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid