Quiero poder inspeccionar el contenido de un contenedor Docker (solo lectura). Una forma elegante de hacerlo sería montar el contenido del contenedor en un directorio. Estoy hablando de montar el contenido de un contenedor en el host, no de montar una carpeta en el host dentro de un contenedor.
Puedo ver que hay dos controladores de almacenamiento en Docker en este momento: aufs y btrfs. Mi propia instalación de Docker usa btrfs, y navegar a / var / lib / docker / btrfs / subvolumes me muestra un directorio por contenedor Docker en el sistema. Sin embargo, este es un detalle de implementación de Docker y se siente mal montarlo; enlaza estos directorios en otro lugar.
¿Hay una manera adecuada de hacer esto, o necesito parchear Docker para admitir este tipo de monturas?
fuente
Respuestas:
Echa un vistazo a
docker export
.Para listar rápidamente los archivos en su contenedor:
Exportar:
O para mirar un archivo:
Docker 1.8 admite cp :
https://docs.docker.com/reference/commandline/cp/
actualización: debe ejecutar ssh en su máquina acoplable cuando ejecute esto.
fuente
tar x PATH-IN-CONTAINER
, solo extraerá los archivos que necesita.tar
archivo todavía se crea en el demonio Docker, y toma varios minutos crearlo ...docker export ubuntu|tar -t|grep etc/network
lleva 3 segundos.ubuntu
imagen es muy pequeña ...Puede usar docker commit para mantener el estado actual de su contenedor en una nueva imagen, y comenzar un contenedor interactivo desde esta imagen para inspeccionar el contenido.
De la documentación:
Espero que esto ayude.
fuente
Puede usar nsenter para ejecutar su programa de inspección (que probablemente ya debe estar incluido en el contenedor) dentro de un contenedor / espacio de nombres. Pero para montar el sistema de archivos contenedor como se ve dentro de él, debe montar la imagen original y todas las capas si es aufs, o la acción equivalente para el mapeador de dispositivos, btrfs y los otros (futuros) motores de almacenamiento utilizados, diferentes en cada caso. Probablemente sería más eficiente dejar que Docker haga el trabajo por usted, exactamente como se supone que debe hacer, y usar nsenter para hacer la inspección dentro del contenedor.
Hay otros enfoques. docker diff mostrará qué archivos cambiaron en ese contenedor, si desea ver qué cambió en lugar de lo que estaba en la imagen original.
Y para los datos que deben ser persistentes e inspeccionables, probablemente un mejor patrón sería tenerlo en un volumen en el contenedor, y tenerlo montado en el sistema de archivos real, o en un contenedor de datos puro, o en el mismo contenedor, pero que puede iniciar otro contenedor con el programa de inspección montando esos volúmenes desde él.
fuente
EDITAR: probé la solución a continuación y desafortunadamente no funcionó bien para mí en la práctica. El sistema de archivos montado no reflejaba con precisión el sistema de archivos del contenedor (incluso con
cache=no
). No estoy seguro si este es un problema fundamental o si estoy haciendo algo mal.Puede instalar sshd en la imagen del acoplador y usarlo
docker exec
para ejecutar un servicio ssh (/usr/sbin/sshd -D
) en el contenedor del acoplador (tenga en cuenta que el puerto SSH 22 del contenedor del acoplador debe estar expuesto).Luego, use
docker cp
para copiar su clave ssh pública en el/root/.ssh/authorized_keys
directorio del contenedor docker.Finalmente, use
docker inspect
para encontrar la dirección IP del contenedor y monte el sistema de archivos del contenedor usandoTendría que escribir un guión para que esto funcione cómodamente en la práctica.
fuente