Estoy usando un contenedor acoplable Nginx como imagen base para una aplicación. Estoy redirigiendo los registros de Nginx a syslog, pero no estoy seguro de cuál es la mejor manera de iniciar el syslogd de busybox. Todo funciona si lo inicio manualmente, solo necesito que se ejecute como un demonio automáticamente cuando se ejecuta el contenedor.
Al ver que nginx
está en init.d
, probé esto en mi Dockerfile:
RUN ln -s /bin/busybox syslogd /etc/init.d/syslogd || :
Pero syslogd
aún no se ejecutó al inicio. Dado que la documentación dice que solo se permite un [CMD]
, tengo el siguiente truco:
FROM nginx:mainline-alpine CMD nginx & busybox syslogd -n
Esto funciona, al menos localmente, pero me pregunto cuál es la solución adecuada. De forma predeterminada, el contenedor ya vincula los archivos de registro a stdout
y stderr
, pero no quiero usar el controlador de registro de syslog de docker, porque la aplicación se implementará en Kubernetes , por lo que necesito una solución independiente que funcione en el pod. ¡Gracias!
Haga que su contenedor se registre en la salida estándar, pero recopile los registros en otro lugar.
Una opción es configurar Docker para enviar registros de contenedores a syslog :
docker run --log-driver=syslog --log-opt syslog-address=udp://... ... nginx
Dado que el propio demonio Docker está configurando esto, la syslog-address
debe ser algo a lo que se pueda acceder desde el host. Si está ejecutando syslogd en un contenedor separado, esta opción debe apuntar a un puerto publicado.
Otra opción es usar el registro estándar en formato JSON de Docker, pero usar otra herramienta para reenviar los registros a otro lugar. Esto tiene la desventaja de necesitar una herramienta adicional, pero la ventaja de que los docker logs
funcionan sin modificaciones. Fluentd es una opción prominente de código abierto. (Logstash es otro, pero no parece tener directamente una integración con Docker).