1073 Stimmen

Erforschung des Dateisystems des Docker-Containers

Ich habe mit Docker festgestellt, dass ich verstehen muss, was drinnen in einem Container passiert oder welche Dateien darin existieren. Ein Beispiel ist das Herunterladen von Images aus dem Docker-Index - man hat keine Ahnung, was das Image enthält, daher ist es unmöglich, die Anwendung zu starten.

Was ideal wäre, ist die Möglichkeit, sich per SSH einzuloggen oder Ähnliches. Gibt es ein Tool dafür, oder ist meine Vorstellung von Docker falsch, wenn ich denke, dass ich das tun können sollte.

50voto

Andy Wong Punkte 2811

Sie können Dive verwenden, um den Bildinhalt interaktiv mit TUI anzuzeigen

https://github.com/wagoodman/dive

Bildbeschreibung hier eingeben

46voto

Rovanion Punkte 4122

Das Dateisystem des Containers befindet sich im Datenordner von Docker, normalerweise unter /var/lib/docker. Um das Dateisystem eines laufenden Containers zu starten und zu inspizieren, führen Sie folgendes aus:

hash=$(docker run busybox)
cd /var/lib/docker/aufs/mnt/$hash

Und jetzt ist das aktuelle Arbeitsverzeichnis das Root-Verzeichnis des Containers.

21voto

Gaurav Sharma Punkte 1615

Versuchen Sie es mit

docker exec -it  /bin/bash

Es besteht die Möglichkeit, dass bash nicht implementiert ist. In diesem Fall können Sie folgendes verwenden

docker exec -it  sh

20voto

Nur für LINUX

Der einfachste Weg, den ich benutze, ist die Verwendung des Proc-Verzeichnisses, der Container muss laufen, um die Docker-Containerdateien zu inspizieren.

  1. Finden Sie die Prozess-ID (PID) des Containers und speichern Sie sie in einer Variablen

    PID=$(docker inspect -f '{{.State.Pid}}' your-container-name-here)

  2. Stellen Sie sicher, dass der Container-Prozess läuft, und verwenden Sie den Variablennamen, um in den Containerordner zu gelangen

    cd /proc/$PID/root

Wenn Sie durch das dir navigieren möchten, ohne die PID-Nummer herauszufinden, verwenden Sie einfach diesen langen Befehl

cd /proc/$(docker inspect -f '{{.State.Pid}}' your-container-name-here)/root

Tips:

Nachdem Sie sich im Container befinden, wird alles, was Sie tun, den tatsächlichen Prozess des Containers beeinflussen, wie das Stoppen des Dienstes oder das Ändern der Portnummer.

Hoffentlich hilft es.

Hinweis:

Diese Methode funktioniert nur, wenn der Container noch läuft, sonst existiert das Verzeichnis nicht mehr, wenn der Container gestoppt oder entfernt wurde.

19voto

shx Punkte 936

In meinem Fall wurde in Containern außer sh keine Shell unterstützt. Also funktionierte das wie ein Zauber

docker exec -it  sh

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X