¿Cómo se enumeran los volúmenes en los contenedores acoplables?

212

Cuando uso imágenes de docker de registros, a menudo necesito ver los volúmenes creados por los contenedores de la imagen.

Nota: estoy usando docker versión 1.3.2 en Red Hat 7.

Ejemplo

La postgresimagen oficial del Registro de Docker tiene un volumen configurado para contenedores en /var/lib/postgresql/data.

¿Cuál es el comando más sucinto para mostrar el volumen /var/lib/postgresql/dataen un postgrescontenedor?

CivFan
fuente
55
Nota: eso parece haber cambiado con Docker 1.8.1: vea mi respuesta a continuación
VonC

Respuestas:

322

Use docker pspara obtener la identificación del contenedor.

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

Ejemplo:

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]

La salida

map[/tmp:/tmp] 

aparentemente, se debe al uso del lenguaje Go para implementar las herramientas de comando de Docker.

El docker inspectcomando sin el -f formates bastante detallado. Como es JSON, puede canalizarlo a python o nodejs y extraer lo que necesite.

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>mostrará las capas horneadas en una imagen. Desafortunadamente, docker historyparece obstaculizado por su formato y la falta de opciones para elegir lo que se muestra.

Puede elegir formatos concisos y detallados, a través del indicador --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

Aquí hay un ejemplo detallado.

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
Pablo
fuente
@CivFan También puede hacer otra pregunta sobre las cadenas de formato Go para obtener el resultado en un formato de cadena que pueda usar ... esa sería una pregunta Go, no una pregunta acoplable.
Paul
Por flexibilidad, generalmente no se incluyen volúmenes, sino que se usa la opción -v para ejecutar Docker para adjuntar en tiempo de ejecución. Parece que recuerdo una opción de dockerfile pero nunca la he visto utilizada. Recomiendo hacer una nueva pregunta sobre cualquiera de esto ya que está más allá del alcance de la actual. Quizás alguien más pueda ayudar, en una nueva pregunta será más efectivo para atraer nuevas respuestas.
Paul
1
Reduje esta pregunta a solo contenedores, e hice una nueva pregunta para imágenes .
CivFan
8
Ya no son volúmenes sino monturas.
SIGIS
Este sitio web también tiene una explicación bastante buena: foros.docker.com/t/host-path-of-volume/12277/10
curveorzos
105

Con docker 1.10, ahora tiene nuevos comandos para contenedores de volumen de datos.
(para contenedores regulares, consulte la siguiente sección, para Docker 1.8+):


Con docker 1.8.1 (agosto de 2015), a docker inspect -f '{{ .Volumes }}' containeridestaría vacío.

Ahora debe verificar Mounts, que es una lista de rutas montadas como:

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

Si desea la ruta del primer montaje (por ejemplo), sería (usando el índice 0):

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

Como Mike Mitterer comenta a continuación :

Bastante imprimir todo el asunto:

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

O, como lo comentado por Mitja , utilice el jqcomando .

docker inspect -f '{{ json .Mounts }}' containerid | jq 
VonC
fuente
44
Imprime todo el asunto: docker inspecciona -f '{{json .Mounts}}' containerid | python -m json.tool
Mike Mitterer
1
@MikeMitterer Gracias. He incluido tu comentario en la respuesta para mayor visibilidad.
VonC
2
Si desea una impresión bonita con colores bonitos, puede instalar el jqpaquete en ubuntu y luego simplemente instalarlo :docker inspect -f '{{ json .Mounts }}' containerid | jq
Mitja
1
@ Mitja Gracias. He incluido tu comentario en la respuesta para mayor visibilidad.
VonC
@AlbertValdez Me alegra ser de ayuda.
VonC
21

Mostrar nombres y destinos de punto de montaje de volúmenes utilizados por un contenedor:

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

Esto es compatible con Docker 1.13.

Jens Piegsa
fuente
9

De hecho, busqué en Google esto y encontré mi propia respuesta :) Mi memoria en estos días ... Y para aquellos que no lo saben, commandlinefu es un buen lugar para encontrar y publicar estos fragmentos.

Enumere los volúmenes de la ventana acoplable por contenedor.

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

Ejemplo de salida.

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
chico expulsado
fuente
1
Este hace lo que necesito.
Andres Leon Rangel
8

Puede obtener información sobre qué volúmenes se hornearon específicamente en el contenedor inspeccionando el contenedor y buscando en la salida JSON y comparando un par de campos. Cuando ejecuta docker inspect myContainer, los campos Volumesy le VolumesRWbrindan información sobre TODOS los volúmenes montados dentro de un contenedor, incluidos los volúmenes montados tanto en el Dockerfile con la VOLUMEdirectiva, como en la línea de comandos con el docker run -vcomando. Sin embargo, puede aislar qué volúmenes se montaron en el contenedor utilizando el docker run -vcomando al verificar el HostConfig.Bindscampo en la docker inspectsalida JSON. Para aclarar, este HostConfig.Bindscampo le indica qué volúmenes se montaron específicamente en su docker runcomando con el-vopción. Por lo tanto, si hace referencia cruzada de este campo con el Volumescampo, podrá determinar qué volúmenes se hornearon en el contenedor utilizando VOLUMEdirectivas en el Dockerfile.

Un grep podría lograr esto como:

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

Y...

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

Y en mi ejemplo, puede ver que he montado /var/docker/docker-registry/configen el contenedor /registryusando la -vopción en mi docker runcomando, y he montado los volúmenes /datay /configusando la VOLUMEdirectiva en mi Dockerfile. No es necesario que el contenedor se esté ejecutando para obtener esta información, pero se debe haber ejecutado al menos una vez para completar la HostConfigsalida JSON de su docker inspectcomando.

L0j1k
fuente
1
¿Qué es HostConfig.Bindsy cómo es diferente de lo que se .Volumesve en la respuesta de @Paul?
CivFan
1
Acabo de pasar la última hora mirando a través de los documentos API remotos y la fuente para descubrir la diferencia y, por lo que puedo decir, .Volumesenumera "rutas de asignación de objetos (cadenas) dentro del contenedor para vaciar objetos", y HostConfig.Bindsdescribe la vinculación real montados en el contenedor. Me parece que eso HostConfig.Bindses lo que quieres leer, en comparación .Volumes, aunque me encantaría escuchar un mejor razonamiento.
L0j1k
1
He preguntado #dockerpor Freenode (el canal principal para Docker), y si escucho algo, definitivamente actualizaré aquí con más información. Es una muy buena pregunta que has hecho aquí sobre la diferencia. ¡Gracias!
L0j1k
1
@ CivFan Estaba un poco equivocado. Para ver qué volúmenes se han horneado en la imagen, debe usar AMBOS campos Volumes y HostConfig.Binds en la salida JSON de Docker Inspect. Me he corregido en esta respuesta, que ahora responde más o menos correctamente su pregunta en comparación con lo que tenía antes. ¡Buena suerte! :)
L0j1k
2
¿Ha notado HostConfig.Bindsque solo se completa cuando se especifica la ruta de host del volumen? Por ejemplo, docker run -d -v /docker-test:/docker-test postgresvs docker run -d -v /docker-test postgres. Parece que Docker maneja estos dos casos de volumen de manera bastante diferente por alguna razón.
CivFan
8

Para Docker 1.8, uso:

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

si desea enumerar todos los nombres de los contenedores con los volúmenes relevantes que se adjuntaron a cada contenedor, puede intentar esto:

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

salida de ejemplo:

/ opt_rundeck_1 [/ opt / var / lib / mysql: / var / lib / mysql: rw / var / lib / rundeck / var / storage: / var / lib / rundeck / var / storage: 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: nombre del contenedor

[..] - volúmenes unidos al contenedor

dsaydon
fuente
1
Si bien esto técnicamente es una respuesta a la pregunta, carece de explicación. Edite su comentario para explicar qué están haciendo los parámetros y por qué el que hace la pregunta querría usarlos para resolver el problema planteado en su pregunta.
Shawty
6

Aquí hay un comando de línea para obtener la información de volumen para ejecutar contenedores:

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

Salida es:

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

Versión de 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
fuente
3

Variación útil para usuarios de docker-compose:

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

Esto generará de manera muy clara información de volumen analizable. Ejemplo de mi 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 salida contiene una línea para cada contenedor, que enumera los volúmenes (y puntos de montaje) utilizados. Alterar el {{}} .Nombre: {{}} .Destination porción de dar salida a la información que le gustaría.

Si solo desea una lista simple de volúmenes, uno por línea

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

Genial para generar una lista de volúmenes para respaldar. Utilizo esta técnica junto con Blacklabelops Volumerize para hacer una copia de seguridad de todos los volúmenes utilizados por todos los contenedores dentro de una composición acoplable. Los documentos de Volumerize no lo mencionan, pero no necesita usarlo en un contenedor persistente o usar las instalaciones integradas para iniciar y detener servicios. Prefiero dejar las operaciones críticas, como la copia de seguridad y el control del servicio, al usuario real (acoplador externo). Mis copias de seguridad son activadas por la cuenta de usuario real (no acoplable), y uso docker-compose stop para detener los servicios, copia de seguridad de todos los volúmenes en uso y finalmente docker-compose start para reiniciar.

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

Aquí está mi versión para encontrar puntos de montaje de una composición acoplable. En uso esto para hacer una copia de seguridad de los volúmenes.

 # 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

Esta es una combinación de soluciones anteriores.

Plup
fuente
0

Si está utilizando pwsh (powershell core), puede intentar

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

También puede ver tanto el nombre del contenedor como los montajes a continuación

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

Como la salida se convierte como json, puede obtener cualquier propiedad que tenga.

Samselvaprabu
fuente
0

Podemos hacerlo sin la sintaxis de la plantilla -f Go:

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

La primera operación jq elimina jq .[]el {}contenedor de objetos .

La segunda operación jq devolverá todos los elementos de montaje.

l3x
fuente