¿Cómo iniciaría una aplicación en mi máquina host para leer archivos y stdout desde un contenedor docker en ejecución?
Esencialmente quiero hacer esto:
docker start containerid
./myapp // This app will *somehow* have access files and stdout generated by the container I just stared.
¿Cómo haría yo para hacer eso? Para ser más específico con respecto a dónde estoy tratando de llegar con esto; Quiero leer los registros y la salida estándar de un contenedor acoplable y hacer que esos registros se procesen en otro lugar.
También estoy dispuesto a crear otro contenedor docker que pueda leer archivos y stdout de otro contenedor, pero no sé si eso es posible.
-f
opción ha existido durante mucho tiempo (en la escala de tiempo de Docker, de todos modos). Al menos 7 meses según este número: github.com/dotcloud/docker/issues/2997docker logs
comando a un archivo y observar ese archivo, o hacerlo directamente en el contenedor y exponer el archivo de registro como un volumen.Para ver la salida estándar, puede iniciar el contenedor de la ventana acoplable con
-i
. Por supuesto, esto no le permite dejar el proceso iniciado y explorar el contenedor.Alternativamente, puede ver el sistema de archivos del contenedor en
/var/lib/docker/containers/containerid/root/
Sin embargo, ninguno de estos es ideal. Si desea ver registros o cualquier almacenamiento persistente, la forma correcta de hacerlo sería adjuntando un volumen con el
-v
interruptor cuando lo usedocker run
. Esto significaría que puede inspeccionar los archivos de registro en el host o adjuntarlos a otro contenedor e inspeccionarlos allí.fuente
Un poco tarde, pero esto es lo que estoy haciendo
journald
. Es bastante poderoso.Debe ejecutar sus contenedores docker en un sistema operativo con
systemd-journald
.docker run -d --log-driver=journald myapp
Esto canaliza todo al diario del host, que se ocupa de cosas como la poda de registros, el formato de almacenamiento, etc. y le brinda algunas opciones interesantes para verlos:
journalctl CONTAINER_NAME=myapp -f
que lo enviará a su consola a medida que se registre,
journalctl CONTAINER_NAME=myapp > output.log
que le da todo en un archivo para llevar, o
journalctl CONTAINER_NAME=myapp --since=17:45
Además, aún puede ver los registros a través de
docker logs ....
si esa es su preferencia.No más
> my.log
o-v "/apps/myapp/logs:/logs"
etcfuente
El uso compartido de archivos entre un contenedor de la ventana acoplable y el sistema host, o entre contenedores separados, se logra mejor utilizando volúmenes .
Tener su aplicación ejecutándose en otro contenedor es probablemente su mejor solución, ya que garantizará que toda su aplicación se pueda aislar y desplegar fácilmente. Lo que estás intentando hacer suena muy parecido a la configuración descrita en esta excelente publicación de blog , ¡échale un vistazo!
fuente
Puede ver el sistema de archivos del contenedor en
/var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/
y puedes simplemente
fuente