Wenn ich Docker-Images aus Registern verwende, muss ich häufig die Volumes sehen, die von den Containern des Images erstellt wurden.
Hinweis: Ich verwende Docker Version 1.3.2 unter Red Hat 7.
Beispiel
Für das postgres
offizielle Image aus der Docker-Registrierung ist ein Volume für Container unter konfiguriert/var/lib/postgresql/data
.
Was ist der prägnanteste Befehl, um das Volume /var/lib/postgresql/data
in einem postgres
Container anzuzeigen?
Antworten:
Verwenden Sie
docker ps
diese Option , um die Container-ID abzurufen.Dann
docker inspect -f '{{ .Mounts }}' containerid
Beispiel:
Schalter 1
Terminal 2
Die Ausgabe
ist anscheinend auf die Verwendung der Go- Sprache zur Implementierung der Docker-Befehlstools zurückzuführen.
Der
docker inspect
Befehl ohne das-f format
ist ziemlich ausführlich. Da es sich um JSON handelt, können Sie es an Python oder NodeJS weiterleiten und alles extrahieren, was Sie benötigen.docker history <image name>
zeigt die in ein Bild eingebrannten Ebenen. Leiderdocker history
scheint es durch die Formatierung und das Fehlen von Optionen zur Auswahl der angezeigten Elemente beeinträchtigt zu werden.Über das Flag --no-trunc können Sie knappe und ausführliche Formate auswählen.
Hier ist ein ausführliches Beispiel.
quelle
Mit Docker 1.10 haben Sie jetzt neue Befehle für Datenvolumencontainer.
(Für reguläre Container siehe nächster Abschnitt, Docker 1.8+):
docker volume ls
docker volume inspect
Mit Docker 1.8.1 (August 2015)
docker inspect -f '{{ .Volumes }}' containerid
wäre a leer!Sie müssen nun überprüfen
Mounts
, ob es sich um eine Liste der bereitgestellten Pfade handelt, z.Wenn Sie den Pfad des ersten Mount (zum Beispiel) möchten, wäre dies (unter Verwendung des Index 0):
Wie Mike Mitterer unten kommentiert :
Oder verwenden Sie, wie von Mitja kommentiert , den Befehl .
jq
quelle
jq
Paket unter Ubuntu installieren und dann einfach weiterleiten:docker inspect -f '{{ json .Mounts }}' containerid | jq
Namen und Mountpunktziele von Volumes anzeigen, die von einem Container verwendet werden:
Dies ist kompatibel mit Docker 1.13.
quelle
Ich habe das tatsächlich gegoogelt und meine eigene Antwort gefunden :) Mein Gedächtnis in diesen Tagen ... Und für diejenigen, die nichts davon wissen, ist commandlinefu ein schöner Ort, um diese Art von Schnipsel zu finden und zu veröffentlichen.
Listen Sie die Docker-Volumes nach Container auf.
Beispielausgabe.
quelle
Sie können Informationen darüber erhalten, welche Volumes speziell in den Container eingebrannt wurden, indem Sie den Container untersuchen, in der JSON-Ausgabe nachsehen und einige Felder vergleichen. Wenn Sie laufen
docker inspect myContainer
, dieVolumes
undVolumesRW
Felder geben Ihnen Informationen über ALL montierte die Volumina innerhalb eines Behälters, einschließlich Volumes mit der sowohl in der Dockerfile montiertVOLUME
Richtlinie und in der Befehlszeile mit derdocker run -v
Befehl. Sie können jedoch mithilfe desdocker run -v
Befehls isolieren, welche Volumes im Container bereitgestellt wurden, indem SieHostConfig.Binds
in derdocker inspect
JSON-Ausgabe nach dem Feld suchen. In diesemHostConfig.Binds
Feld erfahren Sie, welche Volumes speziell für Ihredocker run
Befehl mit dem-v
Möglichkeit. Wenn Sie dieses Feld mit demVolumes
Feld vergleichen, können Sie mithilfe vonVOLUME
Anweisungen in der Docker-Datei bestimmen, welche Volumes in den Container eingebrannt wurden.Ein Grep könnte dies erreichen wie:
Und...
In meinem Beispiel können Sie sehen, dass ich mithilfe der Option in meinem Befehl
/var/docker/docker-registry/config
in den Container eingebunden habe, und dass ich die und -Volumes mithilfe der Anweisung in meiner Docker-Datei bereitgestellt habe. Der Container muss nicht ausgeführt werden, um diese Informationen abzurufen. Er muss jedoch mindestens einmal ausgeführt worden sein, um die JSON-Ausgabe Ihres Befehls zu füllen./registry
-v
docker run
/data
/config
VOLUME
HostConfig
docker inspect
quelle
HostConfig.Binds
und wie unterscheidet es sich von.Volumes
der Antwort von @Paul?.Volumes
"Mount-Pfade (Zeichenfolgen) für die Objektzuordnung im Container zu leeren Objekten" aufgelistet undHostConfig.Binds
die tatsächliche Bindung beschrieben -montierte Volumes im Container. Dann scheint es mir, dassHostConfig.Binds
Sie genau das lesen möchten.Volumes
, obwohl ich gerne bessere Argumente hören würde.#docker
Freenode (dem Hauptkanal für Docker) nachgefragt , und wenn ich etwas zurück höre, werde ich hier definitiv mit weiteren Informationen aktualisieren. Es ist eine sehr gute Frage, die Sie hier über den Unterschied gestellt haben. Vielen Dank!HostConfig.Binds
nur gefüllt wird, wenn der Hostpfad des Volumes angegeben ist? Zum Beispieldocker run -d -v /docker-test:/docker-test postgres
vs.docker run -d -v /docker-test postgres
. Es scheint, dass Docker diese beiden Volumenfälle aus irgendeinem Grund sehr unterschiedlich behandelt.Für Docker 1.8 verwende ich:
quelle
Wenn Sie alle Containernamen mit den relevanten Volumes auflisten möchten, die an jeden Container angehängt sind, können Sie Folgendes versuchen:
Beispielausgabe:
/ opt_rundeck_1 - Containername
[..] - am conatiner angebrachte Bände
quelle
Hier ist ein einzeiliger Befehl, um die Volume-Informationen zum Ausführen von Containern abzurufen:
Ausgabe ist:
Docker-Version:
quelle
Nützliche Variante für Docker-Compose-Benutzer:
Dies gibt sehr ordentlich analysierbare Volumeninformationen aus. Beispiel aus meinem WordPress Docker-Compose:
Die Ausgabe enthält eine Zeile für jeden Container, in der die verwendeten Volumes (und Mountpunkte) aufgelistet sind. Ändern Sie den {{.Name}}: {{.Destination}} um die Informationen auszugeben.
Wenn Sie nur eine einfache Liste von Volumes wünschen, eine pro Zeile
Hervorragend geeignet, um eine Liste der zu sichernden Volumes zu erstellen. Ich verwende diese Technik zusammen mit Blacklabelops Volumerize, um alle Volumes zu sichern, die von allen Containern innerhalb eines Docker-Compose verwendet werden. In den Dokumenten für Volumerize wird es nicht aufgerufen, aber Sie müssen es nicht in einem dauerhaften Container verwenden oder die integrierten Funktionen zum Starten und Stoppen von Diensten verwenden. Ich überlasse kritische Vorgänge wie Sicherung und Dienststeuerung lieber dem tatsächlichen Benutzer (außerhalb des Dockers). Meine Sicherungen werden vom tatsächlichen Benutzerkonto (ohne Docker) ausgelöst und verwenden Docker-Compose-Stopp, um Dienste zu stoppen, alle verwendeten Volumes zu sichern und schließlich Docker-Compose-Start neu zu starten.
quelle
quelle
Hier ist meine Version, um Mount-Punkte eines Docker-Compos zu finden. Verwenden Sie diese Option, um die Volumes zu sichern.
Dies ist eine Kombination früherer Lösungen.
quelle
Wenn Sie pwsh (Powershell Core) verwenden, können Sie es versuchen
Außerdem können Sie sowohl den Containernamen als auch die Mounts wie folgt sehen
Da die Ausgabe als json konvertiert wird, können Sie alle Eigenschaften abrufen, die sie hat.
quelle
Wir können dies ohne die Syntax der Vorlage -f Go tun:
Die erste jq-Operation entfernt
jq .[]
den Objekt-{}
Wrapper.Die zweite jq-Operation gibt alle Mount-Elemente zurück.
quelle