GNU/Linux >> Znalost Linux >  >> Linux

Prozkoumání systému souborů kontejneru Docker

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.


Linux
  1. Některé příkazy DOCKER

  2. Jak opustit kontejner Docker

  3. Předat hostitelský port do kontejneru dockeru

  1. Stačí říct ne rootovi (v kontejnerech)

  2. Superblock, Inode, Dentry a soubor?

  3. Docker v Dockeru nemůže připojit svazek

  1. Jak vykopat soubor z Awk?

  2. Extrahovat soubor z obrázku Dockeru?

  3. Úvod do Dockeru