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.

4voto

qxo Punkte 1416

Für den Docker Aufs-Treiber:

Das Skript wird das Container-Root-Verzeichnis finden (Getestet auf Docker 1.7.1 und 1.10.3)

if [ -z "$1" ] ; then
 echo 'docker-find-root $container_id_or_name '
 exit 1
fi
CID=$(docker inspect --format {{.Id}} $1)
if [ -n "$CID" ] ; then
    if [ -f  /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id ] ; then
        F1=$(cat /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id)
       d1=/var/lib/docker/aufs/mnt/$F1
    fi
    if [ ! -d "$d1" ] ; then
        d1=/var/lib/docker/aufs/diff/$CID
    fi
    echo $d1
fi

3voto

Giuseppe Scrivano Punkte 1155

Ein weiterer Trick ist es, das atomic-Tool zu verwenden, um etwas ähnliches wie folgt zu tun:

mkdir -p /pfad/zum/mnt && atomic mount IMAGE /pfad/zum/mnt

Das Docker-Image wird für Sie unter /pfad/zum/mnt gemountet, damit Sie es inspizieren können.

3voto

AlonL Punkte 5672

Für einen bereits laufenden Container können Sie Folgendes tun:

dockerId=$(docker inspect -f {{.Id}} [docker_id_or_name])

cd /var/lib/docker/btrfs/subvolumes/$dockerId

Sie müssen root sein, um in dieses Verzeichnis zu wechseln. Wenn Sie kein root sind, versuchen Sie 'sudo su', bevor Sie den Befehl ausführen.

Bearbeiten: Ab Version 1.3 siehe Jiris Antwort - es ist besser.

2voto

kgnete Punkte 214

Mein bevorzugter Weg, um zu verstehen, was im Container vor sich geht, ist:

  1. expose -p 8000

    docker run -it -p 8000:8000 image
  2. Starten Sie den Server darin

    python -m SimpleHTTPServer

2voto

tim-montague Punkte 13518

Oft muss ich nur das Docker-Dateisystem erkunden, weil mein Build nicht läuft, also ist docker run -it bash unpraktisch. Außerdem möchte ich keine Zeit und Speicherplatz für das Kopieren von Dateisystemen verschwenden, daher ist docker cp : auch unpraktisch.

Obwohl möglicherweise unkonventionell, empfehle ich, mit ls als abschließendem Befehl in der Docker-Datei neu zu erstellen:

CMD [ "ls", "-R" ]

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