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?

Respuestas:
Use
docker pspara obtener la identificación del contenedor.Luego
docker inspect -f '{{ .Mounts }}' containeridEjemplo:
terminal 1
terminal 2
La salida
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.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.
Aquí hay un ejemplo detallado.
fuente
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+):
docker volume lsdocker volume inspectCon 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:Si desea la ruta del primer montaje (por ejemplo), sería (usando el índice 0):
Como Mike Mitterer comenta a continuación :
O, como lo comentado por Mitja , utilice el
jqcomando .fuente
jqpaquete en ubuntu y luego simplemente instalarlo :docker inspect -f '{{ json .Mounts }}' containerid | jqMostrar nombres y destinos de punto de montaje de volúmenes utilizados por un contenedor:
Esto es compatible con Docker 1.13.
fuente
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.
Ejemplo de salida.
fuente
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 camposVolumesy leVolumesRWbrindan información sobre TODOS los volúmenes montados dentro de un contenedor, incluidos los volúmenes montados tanto en el Dockerfile con laVOLUMEdirectiva, como en la línea de comandos con eldocker run -vcomando. Sin embargo, puede aislar qué volúmenes se montaron en el contenedor utilizando eldocker run -vcomando al verificar elHostConfig.Bindscampo en ladocker inspectsalida JSON. Para aclarar, esteHostConfig.Bindscampo le indica qué volúmenes se montaron específicamente en sudocker runcomando con el-vopción. Por lo tanto, si hace referencia cruzada de este campo con elVolumescampo, podrá determinar qué volúmenes se hornearon en el contenedor utilizandoVOLUMEdirectivas en el Dockerfile.Un grep podría lograr esto como:
Y...
Y en mi ejemplo, puede ver que he montado
/var/docker/docker-registry/configen el contenedor/registryusando la-vopción en midocker runcomando, y he montado los volúmenes/datay/configusando laVOLUMEdirectiva 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 laHostConfigsalida JSON de sudocker inspectcomando.fuente
HostConfig.Bindsy cómo es diferente de lo que se.Volumesve en la respuesta de @Paul?.Volumesenumera "rutas de asignación de objetos (cadenas) dentro del contenedor para vaciar objetos", yHostConfig.Bindsdescribe la vinculación real montados en el contenedor. Me parece que esoHostConfig.Bindses lo que quieres leer, en comparación.Volumes, aunque me encantaría escuchar un mejor razonamiento.#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!HostConfig.Bindsque solo se completa cuando se especifica la ruta de host del volumen? Por ejemplo,docker run -d -v /docker-test:/docker-test postgresvsdocker run -d -v /docker-test postgres. Parece que Docker maneja estos dos casos de volumen de manera bastante diferente por alguna razón.Para Docker 1.8, uso:
fuente
si desea enumerar todos los nombres de los contenedores con los volúmenes relevantes que se adjuntaron a cada contenedor, puede intentar esto:
salida de ejemplo:
/ opt_rundeck_1: nombre del contenedor
[..] - volúmenes unidos al contenedor
fuente
Aquí hay un comando de línea para obtener la información de volumen para ejecutar contenedores:
Salida es:
Versión de Docker:
fuente
Variación útil para usuarios de docker-compose:
Esto generará de manera muy clara información de volumen analizable. Ejemplo de mi wordpress docker-compose:
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
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.
fuente
fuente
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.
Esta es una combinación de soluciones anteriores.
fuente
Si está utilizando pwsh (powershell core), puede intentar
También puede ver tanto el nombre del contenedor como los montajes a continuación
Como la salida se convierte como json, puede obtener cualquier propiedad que tenga.
fuente
Podemos hacerlo sin la sintaxis de la plantilla -f Go:
La primera operación jq elimina
jq .[]el{}contenedor de objetos .La segunda operación jq devolverá todos los elementos de montaje.
fuente