Wie listet man Volumes in Docker-Containern auf?


212

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 postgresoffizielle 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/datain einem postgresContainer anzuzeigen?


5
Hinweis: Das scheint sich mit Docker 1.8.1 geändert zu haben: siehe meine Antwort unten
VonC

Antworten:


322

Verwenden Sie docker psdiese Option , um die Container-ID abzurufen.

Dann docker inspect -f '{{ .Mounts }}' containerid

Beispiel:

Schalter 1

$ docker run -it -v /tmp:/tmp ubuntu:14.04 /bin/bash

Terminal 2

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
ddb7b55902cc        ubuntu:14.04        "/bin/bash"         About a minute ago   Up About a minute                       distracted_banach   

$ docker inspect -f "{{ .Mounts }}" ddb7
map[/tmp:/tmp]

Die Ausgabe

map[/tmp:/tmp] 

ist anscheinend auf die Verwendung der Go- Sprache zur Implementierung der Docker-Befehlstools zurückzuführen.

Der docker inspectBefehl ohne das -f formatist 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.

paul@home:~$ docker inspect ddb7
[{
    "AppArmorProfile": "",
    "Args": [],
    "Config": {
        "AttachStderr": true,
        "AttachStdin": true,
        "AttachStdout": true,
        "Cmd": [
            "/bin/bash"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "ExposedPorts": null,
        "Hostname": "ddb7b55902cc",
        "Image": "ubuntu:14.04",
        "MacAddress": "",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": true,
        "PortSpecs": null,
        "StdinOnce": true,
        "Tty": true,
        "User": "",
        "Volumes": null,
        "WorkingDir": ""
    },
    "Created": "2015-05-08T22:41:44.74862921Z",
    "Driver": "devicemapper",
    "ExecDriver": "native-0.2",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": [
            "/tmp:/tmp"
        ],
        "CapAdd": null,
        "CapDrop": null,
        "ContainerIDFile": "",
        "Devices": [],
        "Dns": null,
        "DnsSearch": null,
        "ExtraHosts": null,
        "IpcMode": "",
        "Links": null,
        "LxcConf": [],
        "NetworkMode": "bridge",
        "PidMode": "",
        "PortBindings": {},
        "Privileged": false,
        "PublishAllPorts": false,
        "ReadonlyRootfs": false,
        "RestartPolicy": {
            "MaximumRetryCount": 0,
            "Name": ""
        },
        "SecurityOpt": null,
        "VolumesFrom": null
    },
    "HostnamePath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/hostname",
    "HostsPath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/hosts",
    "Id": "ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a",
    "Image": "ed5a78b7b42bde1e3e4c2996e02da778882dca78f8919cbd0deb6694803edec3",
    "MountLabel": "",
    "Name": "/distracted_banach",
    "NetworkSettings": {
        "Bridge": "docker0",
        "Gateway": "172.17.42.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "172.17.0.4",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "LinkLocalIPv6Address": "fe80::42:acff:fe11:4",
        "LinkLocalIPv6PrefixLen": 64,
        "MacAddress": "02:42:ac:11:00:04",
        "PortMapping": null,
        "Ports": {}
    },
    "Path": "/bin/bash",
    "ProcessLabel": "",
    "ResolvConfPath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/resolv.conf",
    "RestartCount": 0,
    "State": {
        "Error": "",
        "ExitCode": 0,
        "FinishedAt": "0001-01-01T00:00:00Z",
        "OOMKilled": false,
        "Paused": false,
        "Pid": 6115,
        "Restarting": false,
        "Running": true,
        "StartedAt": "2015-05-08T22:41:45.367432585Z"
    },
    "Volumes": {
        "/tmp": "/tmp"
    },
    "VolumesRW": {
        "/tmp": true
    }
}
]

docker history <image name>zeigt die in ein Bild eingebrannten Ebenen. Leider docker historyscheint 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.

$ docker history drpaulbrewer/spark-worker
IMAGE               CREATED             CREATED BY                                      SIZE
438ff4e1753a        2 weeks ago         /bin/sh -c #(nop) CMD [/bin/sh -c /spark/my-s   0 B
6b664e299724        2 weeks ago         /bin/sh -c #(nop) ADD file:09da603c5f0dca7cc6   296 B
f6ae126ae124        2 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaf   0 B
70bcb3ffaec9        2 weeks ago         /bin/sh -c #(nop) EXPOSE 2222/tcp 4040/tcp 60   0 B
1332ac203849        2 weeks ago         /bin/sh -c apt-get update && apt-get --yes up   1.481 GB
8e6f1e0bb1b0        2 weeks ago         /bin/sh -c sed -e 's/archive.ubuntu.com/www.g   1.975 kB
b3d242776b1f        2 weeks ago         /bin/sh -c #(nop) WORKDIR /spark/spark-1.3.1    0 B
ac0d6cc5aa3f        2 weeks ago         /bin/sh -c #(nop) ADD file:b6549e3d28e2d149c0   25.89 MB
6ee404a44b3f        5 weeks ago         /bin/sh -c #(nop) WORKDIR /spark                0 B
c167faff18cf        5 weeks ago         /bin/sh -c adduser --disabled-password --home   335.1 kB
f55d468318a4        5 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaf   0 B
19c8c047d0fe        8 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]               0 B
c44d976a473f        8 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.879 kB
14dbf1d35e28        8 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   701 B
afa7a164a0d2        8 weeks ago         /bin/sh -c #(nop) ADD file:57f97478006b988c0c   131.5 MB
511136ea3c5a        23 months ago                                                       0 B

Hier ist ein ausführliches Beispiel.

docker history --no-trunc=true drpaulbrewer/spark-worker
IMAGE                                                              CREATED             CREATED BY                                                                                                                                                                                                                                                                                                                                                                                                                        SIZE
438ff4e1753a60779f389a3de593d41f7d24a61da6e1df76dded74a688febd64   2 weeks ago         /bin/sh -c #(nop) CMD [/bin/sh -c /spark/my-spark-worker.sh]                                                                                                                                                                                                                                                                                                                                                                      0 B
6b664e29972481b8d6d47f98167f110609d9599f48001c3ca11c22364196c98a   2 weeks ago         /bin/sh -c #(nop) ADD file:09da603c5f0dca7cc60f1911caf30c3c70df5e4783f7eb10468e70df66e2109f in /spark/                                                                                                                                                                                                                                                                                                                            296 B
f6ae126ae124ca211c04a1257510930b37ea78425e31a273ea0b1495fa176c57   2 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaftc.com                                                                                                                                                                                                                                                                                                                                                                               0 B
70bcb3ffaec97a0d14e93b170ed70cc7d68c3c9dfb0222c1d360a300d6e05255   2 weeks ago         /bin/sh -c #(nop) EXPOSE 2222/tcp 4040/tcp 6066/tcp 7077/tcp 7777/tcp 8080/tcp 8081/tcp                                                                                                                                                                                                                                                                                                                                           0 B
1332ac20384947fe1f15107213b675e5be36a68d72f0e81153d6d5a21acf35af   2 weeks ago         /bin/sh -c apt-get update && apt-get --yes upgrade     && apt-get --yes install sed nano curl wget openjdk-8-jdk scala     && echo "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >>/etc/environment     && export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"     && ./build/mvn -Phive -Phive-thriftserver -DskipTests clean package     && chown -R spark:spark /spark     && mkdir /var/run/sshd   1.481 GB
8e6f1e0bb1b0b9286947d3a4b443cc8099b00f9670aab1d58654051e06f62e51   2 weeks ago         /bin/sh -c sed -e 's/archive.ubuntu.com/www.gtlib.gatech.edu\/pub/' /etc/apt/sources.list > /tmp/sources.list && mv /tmp/sources.list /etc/apt/sources.list                                                                                                                                                                                                                                                                       1.975 kB
b3d242776b1f1f1ae5685471d06a91a68f92845ef6fc6445d831835cd55e5d0b   2 weeks ago         /bin/sh -c #(nop) WORKDIR /spark/spark-1.3.1                                                                                                                                                                                                                                                                                                                                                                                      0 B
ac0d6cc5aa3fdc3b65fc0173f6775af283c3c395c8dae945cf23940435f2785d   2 weeks ago         /bin/sh -c #(nop) ADD file:b6549e3d28e2d149c0bc84f69eb0beab16f62780fc4889bcc64cfc9ce9f762d6 in /spark/                                                                                                                                                                                                                                                                                                                            25.89 MB
6ee404a44b3fdd3ef3318dc10f3d002f1995eea238c78f4eeb9733d00bb29404   5 weeks ago         /bin/sh -c #(nop) WORKDIR /spark                                                                                                                                                                                                                                                                                                                                                                                                  0 B
c167faff18cfecedef30343ef1cb54aca45f4ef0478a3f6296746683f69d601b   5 weeks ago         /bin/sh -c adduser --disabled-password --home /spark spark                                                                                                                                                                                                                                                                                                                                                                        335.1 kB
f55d468318a4778733160d377c5d350dc8f593683009699c2af85244471b15a3   5 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaftc.com                                                                                                                                                                                                                                                                                                                                                                               0 B
19c8c047d0fe2de7239120f2b5c1a20bbbcb4d3eb9cbf0efa59ab27ab047377a   8 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]                                                                                                                                                                                                                                                                                                                                                                                                 0 B
c44d976a473f143937ef91449c73f2cabd109b540f6edf54facb9bc2b4fff136   8 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list                                                                                                                                                                                                                                                                                                                                                          1.879 kB
14dbf1d35e2849a00c6c2628055030fa84b4fb55eaadbe0ecad8b82df65cc0db   8 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/policy-rc.d                                                                                                                                                                                                                                                                                                                                                                               && echo 'exit 101' >> /usr/sbin/policy-rc.d    && chmod +x /usr/sbin/policy-rc.d                        && dpkg-divert --local --rename --add /sbin/initctl    && cp -a /usr/sbin/policy-rc.d /sbin/initctl    && sed -i 's/^exit.*/exit 0/' /sbin/initctl                        && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup                        && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean    && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean    && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean                        && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages                        && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes   701 B
afa7a164a0d215dbf45cd1aadad2a4d12b8e33fc890064568cc2ea6d42ef9b3c   8 weeks ago         /bin/sh -c #(nop) ADD file:57f97478006b988c0c68e5bf82684372e427fd45f21cd7baf5d974d2cfb29e65 in /                                                                                                                                                                                                                                                                                                                                  131.5 MB
511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158   23 months ago                                                                                                                                                                                                                                                                                                                                                                                                                                         0 B

@CivFan Sie können auch eine andere Frage zu Zeichenfolgen im Go-Format stellen, um die Ausgabe in ein Zeichenfolgenformat zu bringen, das Sie verwenden können. Dies wäre eine Go-Frage, keine Docker-Frage.
Paul

Aus Gründen der Flexibilität sind normalerweise keine Volumes enthalten. Stattdessen wird die Option -v zum Andocken ausgeführt, um zur Laufzeit eine Verbindung herzustellen. Ich erinnere mich an eine Dockerfile-Option, habe diese aber noch nie gesehen. Es wird empfohlen, eine neue Frage zu stellen, die über den Rahmen der aktuellen Frage hinausgeht. Vielleicht kann jemand anderes helfen, bei einer neuen Frage ist es am effektivsten, neue Antworten zu finden.
Paul

1
Ich habe diese Frage auf Container beschränkt und eine neue Frage für Bilder gestellt .
CivFan

8
Es sind keine Volumes mehr, sondern Reittiere.
SIGIS

Diese Website hat auch eine ziemlich gute Erklärung: forums.docker.com/t/host-path-of-volume/12277/10
Curveorzos

105

Mit Docker 1.10 haben Sie jetzt neue Befehle für Datenvolumencontainer.
(Für reguläre Container siehe nächster Abschnitt, Docker 1.8+):


Mit Docker 1.8.1 (August 2015) docker inspect -f '{{ .Volumes }}' containeridwäre a leer!

Sie müssen nun überprüfen Mounts, ob es sich um eine Liste der bereitgestellten Pfade handelt, z.

   "Mounts": [
       {
           "Name": "7ced22ebb63b78823f71cf33f9a7e1915abe4595fcd4f067084f7c4e8cc1afa2",
           "Source": "/mnt/sda1/var/lib/docker/volumes/7ced22ebb63b78823f71cf33f9a7e1915abe4595fcd4f067084f7c4e8cc1afa2/_data",
           "Destination": "/home/git/repositories",
           "Driver": "local",
           "Mode": "",
           "RW": true
       }
   ],

Wenn Sie den Pfad des ersten Mount (zum Beispiel) möchten, wäre dies (unter Verwendung des Index 0):

docker inspect -f '{{ (index .Mounts 0).Source }}' containerid

Wie Mike Mitterer unten kommentiert :

Hübsches Drucken der ganzen Sache:

 docker inspect -f '{{ json .Mounts }}' containerid | python -m json.tool 

Oder verwenden Sie, wie von Mitja kommentiert , den Befehl .jq

docker inspect -f '{{ json .Mounts }}' containerid | jq 

4
Drucken Sie das Ganze hübsch aus: Docker inspect -f '{{json .Mounts}}' containerid | Python -m json.tool
Mike Mitterer

1
@ MikeMitterer Danke. Ich habe Ihren Kommentar zur besseren Sichtbarkeit in die Antwort aufgenommen.
VonC

2
Wenn Sie einen hübschen Druck mit hübschen Farben wünschen, können Sie das jqPaket unter Ubuntu installieren und dann einfach weiterleiten:docker inspect -f '{{ json .Mounts }}' containerid | jq
Mitja

1
@Mitja Danke. Ich habe Ihren Kommentar zur besseren Sichtbarkeit in die Antwort aufgenommen.
VonC

@ AlbertValdez Ich bin froh, Ihnen behilflich zu sein.
VonC

21

Namen und Mountpunktziele von Volumes anzeigen, die von einem Container verwendet werden:

docker container inspect \
 -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' \
 CONTAINER_ID_OR_NAME

Dies ist kompatibel mit Docker 1.13.


9

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.

docker ps -a --format '{{ .ID }}' | xargs -I {} docker inspect -f '{{ .Name }}{{ printf "\n" }}{{ range .Mounts }}{{ printf "\n\t" }}{{ .Type }} {{ if eq .Type "bind" }}{{ .Source }}{{ end }}{{ .Name }} => {{ .Destination }}{{ end }}{{ printf "\n" }}' {}

Beispielausgabe.

root@jac007-truserv-jhb1-001 ~/gitlab $ docker ps -a --format '{{ .ID }}' | xargs -I {} docker inspect -f '{{ .Name }}{{ printf "\n" }}{{ range .Mounts }}{{ printf "\n\t" }}{{ .Type }} {{ if eq .Type "bind" }}{{ .Source }}{{ end }}{{ .Name }} => {{ .Destination }}{{ end }}{{ printf "\n" }}' {}
/gitlab_server_1

    volume gitlab-data => /var/opt/gitlab
    volume gitlab-config => /etc/gitlab
    volume gitlab-logs => /var/log/gitlab

/gitlab_runner_1

    bind /var/run/docker.sock => /var/run/docker.sock
    volume gitlab-runner-config => /etc/gitlab-runner
    volume 35b5ea874432f55a26c769e1cdb1ee3f06f78759e6f302e3c4b4aa40f3a495aa => /home/gitlab-runner

1
Dieser macht was ich brauche.
Andres Leon Rangel

8

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, die Volumesund VolumesRWFelder geben Ihnen Informationen über ALL montierte die Volumina innerhalb eines Behälters, einschließlich Volumes mit der sowohl in der Dockerfile montiert VOLUMERichtlinie und in der Befehlszeile mit derdocker run -v Befehl. Sie können jedoch mithilfe des docker run -vBefehls isolieren, welche Volumes im Container bereitgestellt wurden, indem Sie HostConfig.Bindsin der docker inspectJSON-Ausgabe nach dem Feld suchen. In diesem HostConfig.BindsFeld erfahren Sie, welche Volumes speziell für Ihredocker run Befehl mit dem-vMöglichkeit. Wenn Sie dieses Feld mit dem VolumesFeld vergleichen, können Sie mithilfe von VOLUMEAnweisungen in der Docker-Datei bestimmen, welche Volumes in den Container eingebrannt wurden.

Ein Grep könnte dies erreichen wie:

$ docker inspect myContainer | grep -C2 Binds
...
"HostConfig": {
    "Binds": [
        "/var/docker/docker-registry/config:/registry"
    ],

Und...

$ docker inspect myContainer | grep -C3 -e "Volumes\":"
...
"Volumes": {
    "/data": "/var/lib/docker...",
    "/config": "/var/lib/docker...",
    "/registry": "/var/docker/docker-registry/config"

In meinem Beispiel können Sie sehen, dass ich mithilfe der Option in meinem Befehl /var/docker/docker-registry/configin 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-vdocker run/data/configVOLUMEHostConfigdocker inspect


1
Was ist HostConfig.Bindsund wie unterscheidet es sich von .Volumesder Antwort von @Paul?
CivFan

1
Ich habe gerade die letzte Stunde damit verbracht, die Remote-API-Dokumente und die Quelle zu durchsuchen , um den Unterschied zu ermitteln. Nach allem, was ich sagen kann, werden .Volumes"Mount-Pfade (Zeichenfolgen) für die Objektzuordnung im Container zu leeren Objekten" aufgelistet und HostConfig.Bindsdie tatsächliche Bindung beschrieben -montierte Volumes im Container. Dann scheint es mir, dass HostConfig.BindsSie genau das lesen möchten .Volumes, obwohl ich gerne bessere Argumente hören würde.
L0j1k

1
Ich habe bei #dockerFreenode (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!
L0j1k

1
@CivFan Ich habe mich irgendwie geirrt. Um zu sehen, welche Volumes in das Image eingebrannt wurden, müssen Sie BEIDE Felder Volumes und HostConfig.Binds in der JSON-Ausgabe von Docker Inspect verwenden. Ich habe mich in dieser Antwort korrigiert, die Ihre Frage jetzt mehr oder weniger richtig beantwortet als zuvor. Viel Glück! :)
L0j1k

2
Haben Sie bemerkt, dass HostConfig.Bindsnur gefüllt wird, wenn der Hostpfad des Volumes angegeben ist? Zum Beispiel docker run -d -v /docker-test:/docker-test postgresvs. docker run -d -v /docker-test postgres. Es scheint, dass Docker diese beiden Volumenfälle aus irgendeinem Grund sehr unterschiedlich behandelt.
CivFan

8

Für Docker 1.8 verwende ich:

$ docker inspect -f "{{ .Config.Volumes }}" 957d2dd1d4e8
map[/xmount/dvol.01:{}]
$ 

8

Wenn Sie alle Containernamen mit den relevanten Volumes auflisten möchten, die an jeden Container angehängt sind, können Sie Folgendes versuchen:

docker ps -q | xargs docker container inspect -f '{{ .Name }} {{ .HostConfig.Binds }}'

Beispielausgabe:

/ opt_rundeck_1 [/ opt / var / lib / mysql: / var / lib / mysql: rw / var / lib / rundeck / var / speicher: / var / lib / rundeck / var / speicher: rw / opt / var / rundeck / .ssh: /var/lib/rundeck/.ssh: rw / opt / etc / rundeck: / etc / rundeck: rw / var / log / rundeck: / var / log / rundeck: rw / opt / rundeck-plugins: / opt / rundeck-plugins: rw / opt / var / rundeck: / var / rundeck: rw]

/ opt_rundeck_1 - Containername

[..] - am conatiner angebrachte Bände


1
Dies ist zwar technisch gesehen eine Antwort auf die Frage, es fehlt jedoch eine Erklärung. Bitte bearbeiten Sie Ihren Kommentar so, dass Sie erklären, was die Parameter tun und warum der Fragesteller sie verwenden möchte, um das in seiner Frage aufgeworfene Problem zu lösen.
Shawty

6

Hier ist ein einzeiliger Befehl, um die Volume-Informationen zum Ausführen von Containern abzurufen:

for contId in `docker ps -q`; do echo "Container Name: "   `docker ps -f "id=$contId" | awk '{print $NF}' | grep -v NAMES`; echo "Container Volume: " `docker inspect -f '{{.Config.Volumes}}' $contId`; docker inspect -f '{{ json .Mounts }}' $contId  | jq '.[]';   printf "\n"; done

Ausgabe ist:

root@ubuntu:/var/lib# for contId in `docker ps -q`; do echo "Container Name: "   `docker ps -f "id=$contId" | awk '{print $NF}' | grep -v NAMES`; echo "Container Volume: " `docker inspect -f '{{.Config.Volumes}}' $contId`; docker inspect -f '{{ json .Mounts }}' $contId  | jq '.[]';   printf "\n"; done

Container Name:  freeradius
Container Volume:  map[]

Container Name:  postgresql
Container Volume:  map[/run/postgresql:{} /var/lib/postgresql:{}]
{
  "Propagation": "",
  "RW": true,
  "Mode": "",
  "Driver": "local",
  "Destination": "/run/postgresql",
  "Source":     "/var/lib/docker/volumes/83653a53315c693f0f31629f4680c56dfbf861c7ca7c5119e695f6f80ec29567/_data",
  "Name": "83653a53315c693f0f31629f4680c56dfbf861c7ca7c5119e695f6f80ec29567"
}
{
  "Propagation": "rprivate",
  "RW": true,
  "Mode": "",
  "Destination": "/var/lib/postgresql",
  "Source": "/srv/docker/postgresql"
}

Container Name:  rabbitmq
Container Volume:  map[]

Docker-Version:

root@ubuntu:~# docker version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 21:44:32 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 21:44:32 2016
 OS/Arch:      linux/amd64

3

Nützliche Variante für Docker-Compose-Benutzer:

docker-compose ps -q | xargs docker container inspect  \
   -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' 

Dies gibt sehr ordentlich analysierbare Volumeninformationen aus. Beispiel aus meinem WordPress Docker-Compose:

ubuntu@core $ docker-compose ps -q | xargs docker container inspect  -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' 
core_wpdb:/var/lib/mysql 
core_wpcode:/code core_wphtml:/var/www/html 

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

$ docker-compose ps -q | xargs docker container inspect  \
   -f '{{ range .Mounts }}{{ .Name }} {{ end }}' \
   | xargs -n 1 echo
core_wpdb
core_wpcode
core_wphtml

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.



1

Hier ist meine Version, um Mount-Punkte eines Docker-Compos zu finden. Verwenden Sie diese Option, um die Volumes zu sichern.

 # for Id in $(docker-compose -f ~/ida/ida.yml ps -q); do docker inspect -f '{{ (index .Mounts 0).Source }}' $Id; done
/data/volumes/ida_odoo-db-data/_data
/data/volumes/ida_odoo-web-data/_data

Dies ist eine Kombination früherer Lösungen.


0

Wenn Sie pwsh (Powershell Core) verwenden, können Sie es versuchen

(docker ps --format='{{json .}}' |  ConvertFrom-Json).Mounts

Außerdem können Sie sowohl den Containernamen als auch die Mounts wie folgt sehen

docker ps --format='{{json .}}' |  ConvertFrom-Json | select Names,Mounts

Da die Ausgabe als json konvertiert wird, können Sie alle Eigenschaften abrufen, die sie hat.


0

Wir können dies ohne die Syntax der Vorlage -f Go tun:

docker inspect <CONTAINER_ID> | jq .[] | jq .Mounts[]

Die erste jq-Operation entfernt jq .[]den Objekt- {}Wrapper.

Die zweite jq-Operation gibt alle Mount-Elemente zurück.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.