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 postgres
imagen 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/data
en un postgres
contenedor?
Respuestas:
Use
docker ps
para obtener la identificación del contenedor.Luego
docker inspect -f '{{ .Mounts }}' containerid
Ejemplo:
terminal 1
terminal 2
La salida
aparentemente, se debe al uso del lenguaje Go para implementar las herramientas de comando de Docker.
El
docker inspect
comando sin el-f format
es 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 history
parece 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 ls
docker volume inspect
Con docker 1.8.1 (agosto de 2015), a
docker inspect -f '{{ .Volumes }}' containerid
estarí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
jq
comando .fuente
jq
paquete en ubuntu y luego simplemente instalarlo :docker inspect -f '{{ json .Mounts }}' containerid | jq
Mostrar 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 camposVolumes
y leVolumesRW
brindan información sobre TODOS los volúmenes montados dentro de un contenedor, incluidos los volúmenes montados tanto en el Dockerfile con laVOLUME
directiva, como en la línea de comandos con eldocker run -v
comando. Sin embargo, puede aislar qué volúmenes se montaron en el contenedor utilizando eldocker run -v
comando al verificar elHostConfig.Binds
campo en ladocker inspect
salida JSON. Para aclarar, esteHostConfig.Binds
campo le indica qué volúmenes se montaron específicamente en sudocker run
comando con el-v
opción. Por lo tanto, si hace referencia cruzada de este campo con elVolumes
campo, podrá determinar qué volúmenes se hornearon en el contenedor utilizandoVOLUME
directivas en el Dockerfile.Un grep podría lograr esto como:
Y...
Y en mi ejemplo, puede ver que he montado
/var/docker/docker-registry/config
en el contenedor/registry
usando la-v
opción en midocker run
comando, y he montado los volúmenes/data
y/config
usando laVOLUME
directiva 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 laHostConfig
salida JSON de sudocker inspect
comando.fuente
HostConfig.Binds
y cómo es diferente de lo que se.Volumes
ve en la respuesta de @Paul?.Volumes
enumera "rutas de asignación de objetos (cadenas) dentro del contenedor para vaciar objetos", yHostConfig.Binds
describe la vinculación real montados en el contenedor. Me parece que esoHostConfig.Binds
es lo que quieres leer, en comparación.Volumes
, aunque me encantaría escuchar un mejor razonamiento.#docker
por 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.Binds
que solo se completa cuando se especifica la ruta de host del volumen? Por ejemplo,docker run -d -v /docker-test:/docker-test postgres
vsdocker 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