Tuve el mismo problema y pensé que puede resolverse simplemente con un trabajo cron que llama unattended-upgrade
diariamente.
Mi intención es tener esto como una solución automática y rápida para garantizar que el contenedor de producción sea seguro y actualizado porque me puede llevar algún tiempo actualizar mis imágenes e implementar una nueva imagen acoplable con las últimas actualizaciones de seguridad.
También es posible automatizar la creación e implementación de imágenes con ganchos Github
He creado una imagen básica de docker con la que comprueba e instala automáticamente actualizaciones de seguridad a diario (puede ejecutarse directamente docker run itech/docker-unattended-upgrade
).
También me encontré con otro enfoque diferente para verificar si el contenedor necesita una actualización.
Mi implementación completa:
Dockerfile
FROM ubuntu:14.04
RUN apt-get update \
&& apt-get install -y supervisor unattended-upgrades \
&& rm -rf /var/lib/apt/lists/*
COPY install /install
RUN chmod 755 install
RUN /install
COPY start /start
RUN chmod 755 /start
Guiones de ayuda
Instalar en pc
#!/bin/bash
set -e
cat > /etc/supervisor/conf.d/cron.conf <<EOF
[program:cron]
priority=20
directory=/tmp
command=/usr/sbin/cron -f
user=root
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
EOF
rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/start"]
comienzo
#!/bin/bash
set -e
echo "Adding crontab for unattended-upgrade ..."
echo "0 0 * * * root /usr/bin/unattended-upgrade" >> /etc/crontab
# can also use @daily syntax or use /etc/cron.daily
echo "Starting supervisord ..."
exec /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
Editar
Desarrollé una pequeña herramienta docker-run que se ejecuta como contenedor de docker y se puede usar para actualizar paquetes dentro de todos o contenedores de ejecución seleccionados, también se puede usar para ejecutar comandos arbitrarios.
Se puede probar fácilmente con el siguiente comando:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
que por defecto se ejecutará date
comandos en todos los contenedores que se ejecutan y mostrar los resultados. Si pasa en su update
lugar exec
, se ejecutará apt-get update
seguido de apt-get upgrade -y
todos los contenedores en ejecución