Comment répertoriez-vous les volumes dans les conteneurs Docker?

213

Lors de l'utilisation d'images docker à partir de registres, j'ai souvent besoin de voir les volumes créés par les conteneurs de l'image.

Remarque: j'utilise Docker version 1.3.2 sur Red Hat 7.

Exemple

L' postgresimage officielle du Docker Registry a un volume configuré pour les conteneurs à /var/lib/postgresql/data.

Quelle est la commande la plus succincte pour afficher le volume /var/lib/postgresql/datadans un postgresconteneur?

CivFan
la source
5
Remarque: cela semble avoir changé avec le docker 1.8.1: voir ma réponse ci
VonC

Réponses:

323

Utilisez docker pspour obtenir l'ID du conteneur.

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

Exemple:

terminal 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]

Le résultat

map[/tmp:/tmp] 

est, apparemment, dû à l'utilisation du langage Go pour implémenter les outils de commande docker.

La docker inspectcommande sans le -f formatest assez verbeuse. Comme il s'agit de JSON, vous pouvez le diriger vers python ou nodejs et extraire tout ce dont vous avez besoin.

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>affichera les calques cuits dans une image. Malheureusement, docker historysemble entravé par sa mise en forme et le manque d'options pour choisir ce qui est affiché.

Vous pouvez choisir des formats laconiques et verbeux, via le drapeau --no-trunc.

$ 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

Voici un exemple détaillé.

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 [email protected]                                                                                                                                                                                                                                                                                                                                                                               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 [email protected]                                                                                                                                                                                                                                                                                                                                                                               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
Paul
la source
@CivFan Vous pouvez également poser une autre question sur les chaînes au format Go pour obtenir la sortie dans un format de chaîne que vous pouvez utiliser .... ce serait une question Go et non une question de docker.
Paul
Pour plus de flexibilité, il n'y a généralement pas de volumes inclus, mais à la place, l'option -v de docker run est utilisée pour se connecter au moment de l'exécution. Il me semble rappeler une option dockerfile mais je n'ai jamais vu celle-ci utilisée. Nous vous recommandons de poser une nouvelle question à propos de tout cela au-delà de la portée de l'actuelle. Peut-être que quelqu'un d'autre peut aider, à une nouvelle question sera plus efficace pour attirer de nouvelles réponses.
Paul
1
J'ai réduit cette question à des conteneurs et posé une nouvelle question pour les images .
CivFan
8
Ce ne sont plus des volumes mais des montures.
SIGIS
Ce site a aussi une assez bonne explication: forums.docker.com/t/host-path-of-volume/12277/10
curveorzos
105

Avec docker 1.10, vous disposez désormais de nouvelles commandes pour les conteneurs de volume de données.
(pour les conteneurs réguliers, voir la section suivante, pour docker 1.8+):


Avec docker 1.8.1 (août 2015), a docker inspect -f '{{ .Volumes }}' containeridserait vide!

Vous devez maintenant vérifier Mounts, qui est une liste de chemins montés comme:

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

Si vous voulez le chemin du premier montage (par exemple), ce serait (en utilisant l'index 0):

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

Comme Mike Mitterer commente ci - dessous :

Joliment imprimer le tout:

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

Ou, comme commenté par Mitja , utilisez la jqcommande .

docker inspect -f '{{ json .Mounts }}' containerid | jq 
VonC
la source
4
Imprime le tout: docker inspect -f '{{json .Mounts}}' containerid | python -m json.tool
Mike Mitterer
1
@MikeMitterer Merci. J'ai inclus votre commentaire dans la réponse pour plus de visibilité.
VonC
2
Si vous voulez de jolies impressions avec de jolies couleurs, vous pouvez installer le jqpaquet sous ubuntu, puis y rediriger:docker inspect -f '{{ json .Mounts }}' containerid | jq
Mitja
1
@Mitja Merci. J'ai inclus votre commentaire dans la réponse pour plus de visibilité.
VonC
@AlbertValdez Heureux de vous aider.
VonC
21

Afficher les noms et les destinations des points de montage des volumes utilisés par un conteneur:

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

Ceci est compatible avec Docker 1.13.

Jens Piegsa
la source
10

J'ai fait une recherche sur Google et trouvé ma propre réponse :) Ma mémoire ces jours-ci ... Et pour ceux qui ne le savent pas, commandlinefu est un bon endroit pour trouver et publier ces extraits.

Répertoriez les volumes Docker par conteneur.

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" }}' {}

Exemple de sortie.

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
expulsionboy
la source
1
Celui-ci fait ce dont j'ai besoin.
Andres Leon Rangel
8

Vous pouvez obtenir des informations sur les volumes qui ont été spécifiquement intégrés dans le conteneur en inspectant le conteneur et en consultant la sortie JSON et en comparant quelques champs. Lorsque vous exécutez docker inspect myContainer, les champs Volumeset VolumesRWvous fournissent des informations sur TOUS les volumes montés à l'intérieur d'un conteneur, y compris les volumes montés dans le Dockerfile avec la VOLUMEdirective et sur la ligne de commande avec la docker run -vcommande. Cependant, vous pouvez isoler les volumes montés dans le conteneur à l'aide de la docker run -vcommande en vérifiant le HostConfig.Bindschamp dans la docker inspectsortie JSON. Pour clarifier, ce HostConfig.Bindschamp vous indique quels volumes ont été montés spécifiquement dans votre docker runcommande avec le-voption. Donc, si vous faites une référence croisée entre ce champ et le Volumeschamp, vous pourrez déterminer quels volumes ont été cuits dans le conteneur à l'aide des VOLUMEdirectives du Dockerfile.

Un grep pourrait accomplir ceci comme:

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

Et...

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

Et dans mon exemple, vous pouvez voir que j'ai monté /var/docker/docker-registry/configdans le conteneur en /registryutilisant l' -voption de ma docker runcommande, et j'ai monté les volumes /dataet en /configutilisant la VOLUMEdirective dans mon Dockerfile. Le conteneur n'a pas besoin d'être exécuté pour obtenir ces informations, mais il doit avoir été exécuté au moins une fois afin de remplir la HostConfigsortie JSON de votre docker inspectcommande.

L0j1k
la source
1
Qu'est-ce qui est HostConfig.Bindset en quoi est-il différent de ce qui est .Volumesvu dans la réponse de @Paul?
CivFan
1
Je viens de passer la dernière heure à parcourir les documents de l'API distante et la source pour découvrir la différence, et d'après ce que je peux dire, .Volumesrépertorie les "chemins de point de montage de mappage d'objets (chaînes) à l'intérieur du conteneur vers des objets vides" et HostConfig.Bindsdécrit la liaison réelle -volume monté dans le conteneur. Il me semble alors que HostConfig.Bindsc'est ce que vous voulez lire, par opposition .Volumes, même si j'aimerais entendre un meilleur raisonnement.
L0j1k
1
J'ai demandé #dockersur Freenode (le canal principal pour docker), et si j'entends quelque chose en retour, je vais certainement mettre à jour ici avec plus d'informations. C'est une très bonne question que vous avez posée ici sur la différence. Merci!
L0j1k
1
@CivFan J'avais en quelque sorte tort. Afin de voir quels volumes ont été intégrés dans l'image, vous devez utiliser les deux champs Volumes et HostConfig.Binds dans la sortie JSON de docker inspect. Je me suis corrigé dans cette réponse, qui répond maintenant plus ou moins correctement à votre question par rapport à ce que j'avais avant. Bonne chance! :)
L0j1k
2
Avez-vous remarqué qu'il HostConfig.Bindsn'est rempli que lorsque le chemin d'hôte du volume est spécifié? Par exemple, par docker run -d -v /docker-test:/docker-test postgresrapport à docker run -d -v /docker-test postgres. Il semble que Docker gère ces deux cas de volume très différemment pour une raison quelconque.
CivFan
8

Pour Docker 1.8, j'utilise:

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

si vous souhaitez répertorier tous les noms de conteneurs avec les volumes appropriés attachés à chaque conteneur, vous pouvez essayer ceci:

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

exemple de sortie:

/ opt_rundeck_1 [/ opt / var / lib / mysql: / var / lib / mysql: rw / var / lib / rundeck / var / stockage: / var / lib / rundeck / var / stockage: 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 - nom du conteneur

[..] - volumes attachés au conatiner

dsaydon
la source
1
Bien que cela soit techniquement une réponse à la question, cela manque d'explication. Veuillez modifier votre commentaire afin d'expliquer ce que font les paramètres et pourquoi le demandeur voudrait les utiliser pour résoudre le problème posé dans sa question.
shawty
6

Voici une commande de ligne pour obtenir les informations de volume pour l'exécution des conteneurs:

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

La sortie est:

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[]

Version Docker:

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
Yavuz Sert
la source
3

Variation utile pour les utilisateurs de docker-compose:

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

Cela affichera très soigneusement les informations de volume analysables. Exemple de mon 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 

La sortie contient une ligne pour chaque conteneur, répertoriant les volumes (et les points de montage) utilisés. Modifiez la partie {{.Name}}: {{.Destination}} pour afficher les informations que vous souhaitez.

Si vous voulez juste une simple liste de volumes, un par ligne

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

Idéal pour générer une liste de volumes à sauvegarder. J'utilise cette technique avec Blacklabelops Volumerize pour sauvegarder tous les volumes utilisés par tous les conteneurs dans un docker-compose. Les documents pour Volumerize ne l'appellent pas, mais vous n'avez pas besoin de l'utiliser dans un conteneur persistant ou d'utiliser les fonctionnalités intégrées pour démarrer et arrêter les services. Je préfère laisser les opérations critiques telles que la sauvegarde et le contrôle des services à l'utilisateur réel (docker extérieur). Mes sauvegardes sont déclenchées par le compte d'utilisateur réel (non-docker) et utilisent stoper-composer stop pour arrêter les services, sauvegarder tous les volumes en cours d'utilisation et enfin docker-compose start pour redémarrer.

markgo2k
la source
2
docker inspect -f '{{ json .Mounts }}' containerid | jq '.[]'
Camilo Silva
la source
1

Voici ma version pour trouver les points de montage d'un docker composer. Utilisez-le pour sauvegarder les volumes.

 # 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

Il s'agit d'une combinaison de solutions précédentes.

Plup
la source
0

Si vous utilisez pwsh (powershell core), vous pouvez essayer

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

vous pouvez également voir le nom du conteneur et les supports comme ci-dessous

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

Comme la sortie est convertie en json, vous pouvez obtenir toutes les propriétés qu'elle possède.

Samselvaprabu
la source
0

Nous pouvons le faire sans la syntaxe du modèle -f Go:

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

La première opération jq supprime jq .[]l' {}encapsuleur d' objet .

La deuxième opération jq retournera tous les éléments de montage.

l3x
la source