GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erkunden des Dateisystems des Docker-Containers

Hier sind ein paar verschiedene Methoden...

A) Verwenden Sie docker exec (am einfachsten)

Docker-Version 1.3 oder neuer unterstützt den Befehl exec die sich ähnlich verhalten wie nsenter . Dieser Befehl kann einen neuen Prozess in einem bereits ausgeführten Container ausführen (Container muss PID 1-Prozess bereits ausgeführt haben). Sie können /bin/bash ausführen zum Erkunden des Containerstatus:

docker exec -t -i mycontainer /bin/bash

siehe Docker-Befehlszeilendokumentation

B) Verwenden Sie Snapshots

Sie können das Container-Dateisystem folgendermaßen auswerten:

# 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

Auf diese Weise können Sie das Dateisystem des laufenden Containers zum genauen Zeitpunkt auswerten. Container wird noch ausgeführt, es sind keine zukünftigen Änderungen enthalten.

Sie können den Snapshot später löschen mit (Dateisystem des laufenden Containers ist nicht betroffen!):

docker rmi mysnapshot

C) Verwenden Sie ssh

Wenn Sie kontinuierlichen Zugriff benötigen, können Sie sshd in Ihrem Container installieren und den sshd-Daemon ausführen:

 docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
 
 # you need to find out which port to connect:
 docker ps

Auf diese Weise können Sie Ihre App mit ssh ausführen (verbinden und ausführen, was Sie wollen).

D) Verwenden Sie nsenter

Verwenden Sie nsenter finden Sie unter Warum Sie SSHd nicht in Ihren Docker-Containern ausführen müssen

Die Kurzversion lautet:Mit nsenter können Sie eine Shell in einen vorhandenen Container holen, selbst wenn dieser Container kein SSH oder irgendeinen Spezial-Daemon ausführt


UPDATE:ERKUNDEN!

Mit diesem Befehl sollten Sie einen laufenden Docker-Container untersuchen können :

docker exec -it name-of-container bash

Das Äquivalent dafür in docker-compose wäre:

docker-compose exec web bash

(web ist in diesem Fall der Name des Dienstes und hat standardmäßig tty.)

Sobald Sie drinnen sind, tun Sie Folgendes:

ls -lsa

oder irgendein anderer Bash-Befehl wie:

cd ..

Mit diesem Befehl sollten Sie ein Docker-Image untersuchen können :

docker run --rm -it --entrypoint=/bin/bash name-of-image

Sobald Sie drinnen sind, tun Sie Folgendes:

ls -lsa

oder irgendein anderer Bash-Befehl wie:

cd ..

Die -it steht für interaktiv... und tty.

Mit diesem Befehl sollten Sie einen laufenden Docker-Container oder ein Image untersuchen können :

docker inspect name-of-container-or-image

Vielleicht möchten Sie dies tun und herausfinden, ob bash vorhanden ist oder sh da drin. Suchen Sie in der json-Rückgabe nach dem Einstiegspunkt oder cmd.

HINWEIS: Diese Antwort hängt davon ab, ob das commen-Tool vorhanden ist, aber wenn kein bash vorhanden ist Shell oder gängige Tools wie ls vorhanden, könnten Sie zuerst einen in einer Ebene hinzufügen, wenn Sie Zugriff auf den Dockerfile haben :Beispiel für Alpin:

RUN apk add --no-cache bash

Andernfalls, wenn Sie keinen Zugriff auf Dockerfile haben Kopieren Sie dann einfach die Dateien aus einem neu erstellten Container und sehen Sie sie durch, indem Sie Folgendes tun:

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

siehe Docker-Exec-Dokumentation

siehe docker-compose exec-Dokumentation

siehe docker inspect-Dokumentation

siehe docker create-Dokumentation


Falls Ihr Container gestoppt ist oder keine Shell hat (z.B. hello-world in der Installationsanleitung erwähnt oder nicht-alpine traefik ), ist dies wahrscheinlich die einzig mögliche Methode, das Dateisystem zu erkunden.

Sie können das Dateisystem Ihres Containers in eine Tar-Datei archivieren:

docker export adoring_kowalevski > contents.tar

Oder listen Sie die Dateien auf:

docker export adoring_kowalevski | tar t

Beachten Sie, dass dies je nach Image einige Zeit und Speicherplatz in Anspruch nehmen kann.


Linux
  1. Ein Superblock, Inode, Dentry und eine Datei?

  2. Wie kann ich eine Datei von Awk kategorisieren?

  3. So mounten oder symbolisieren Sie eine einzelne Datei in einem Docker-Container

  4. CWP-Dateisystemsperre

  5. Leiten Sie den Host-Port an den Docker-Container weiter

Einführung in das Linux-Dateisystem

Fsck-Befehl unter Linux (Dateisystem reparieren)

Verwaltung des Netzwerkdateisystems (NFS) unter Linux

So führen Sie SSH in einen Docker-Container ein

Was ist das Linux-Dateisystem? Einfache Anleitung

So verwalten Sie Docker-Container