Zde je několik různých metod...
A) Použijte docker exec (nejjednodušší)
Docker verze 1.3 nebo novější podporuje příkaz exec
které se chovají podobně jako nsenter
. Tento příkaz může spustit nový proces v již běžícím kontejneru (kontejner musí mít již spuštěný proces PID 1). Můžete spustit /bin/bash
k prozkoumání stavu kontejneru:
docker exec -t -i mycontainer /bin/bash
viz dokumentace příkazového řádku Docker
B) Použijte funkci Snapshoting
Souborový systém kontejneru můžete vyhodnotit takto:
# find ID of your running container:
docker ps
# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot
# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash
Tímto způsobem můžete vyhodnotit souborový systém běžícího kontejneru v přesném čase. Kontejner stále běží, nejsou zahrnuty žádné budoucí změny.
Později můžete snímek odstranit pomocí (systém souborů běžícího kontejneru není ovlivněn!):
docker rmi mysnapshot
C) Použijte ssh
Pokud potřebujete nepřetržitý přístup, můžete nainstalovat sshd do svého kontejneru a spustit démona sshd:
docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
# you need to find out which port to connect:
docker ps
Tímto způsobem můžete svou aplikaci spouštět pomocí ssh (připojit a spustit, co chcete).
D) Použijte nsenter
Použijte nsenter
, viz Proč nepotřebujete spouštět SSHd v kontejnerech Docker
Krátká verze je:s nsenter můžete dostat shell do neexistujícího kontejneru, i když tento kontejner nespouští SSH ani žádný druh speciálního démona
AKTUALIZACE:ZKOUMÁVÁNÍ!
Tento příkaz by vám měl umožnit prozkoumat spuštěný kontejner dockeru :
docker exec -it name-of-container bash
Ekvivalent pro to v docker-compose by byl:
docker-compose exec web bash
(web je v tomto případě název služby a ve výchozím nastavení má tty.)
Jakmile jste uvnitř, proveďte:
ls -lsa
nebo jakýkoli jiný bash příkaz jako:
cd ..
Tento příkaz by vám měl umožnit prozkoumat obrázek dockeru :
docker run --rm -it --entrypoint=/bin/bash name-of-image
jakmile jste uvnitř, udělejte:
ls -lsa
nebo jakýkoli jiný bash příkaz jako:
cd ..
-it
znamená interaktivní... a tty.
Tento příkaz by vám měl umožnit zkontrolovat spuštěný kontejner nebo obrázek dockeru :
docker inspect name-of-container-or-image
Možná to budete chtít udělat a zjistit, zda existuje nějaký bash
nebo sh
tam. V návratu json vyhledejte vstupní bod nebo cmd.
POZNÁMKA: Tato odpověď závisí na přítomnosti nástroje commen, ale pokud neexistuje žádný bash
shell nebo běžné nástroje jako ls
Pokud máte přístup k Dockerfile
, můžete nejprve přidat jeden do vrstvy :příklad pro alpské:
RUN apk add --no-cache bash
V opačném případě, pokud nemáte přístup k Dockerfile
pak stačí zkopírovat soubory z nově vytvořeného kontejneru a prohlédnout si je takto:
docker create <image> # returns container ID the container is never started.
docker cp <container ID>:<source_path> <destination_path>
docker rm <container ID>
cd <destination_path> && ls -lsah
viz dokumentace docker exec
viz dokumentace docker-compose exec
viz dokumentace docker inspect
viz dokumentace vytvoření dockeru
V případě, že je váš kontejner zastaven nebo nemá shell (např. hello-world
uvedené v instalační příručce nebo jiné než alpine
traefik
), je to pravděpodobně jediná možná metoda prozkoumání souborového systému.
Souborový systém vašeho kontejneru můžete archivovat do souboru tar:
docker export adoring_kowalevski > contents.tar
Nebo seznam souborů:
docker export adoring_kowalevski | tar t
Pamatujte, že v závislosti na obrázku to může nějakou dobu trvat a místo na disku.