Eu tive o mesmo problema e pensei que ele pode ser simplesmente resolvido por um trabalho cron ligando unattended-upgrade
diariamente.
Minha intenção é ter isso como uma solução automática e rápida para garantir que o contêiner de produção seja seguro e atualizado, pois pode levar algum tempo para atualizar minhas imagens e implantar uma nova imagem de janela de encaixe com as atualizações de segurança mais recentes.
Também é possível automatizar a criação e implantação da imagem com ganchos do Github
Criei uma imagem básica do Docker, que verifica e instala automaticamente atualizações de segurança diariamente (pode ser executada diretamente por docker run itech/docker-unattended-upgrade
).
Também deparei com outra abordagem diferente para verificar se o contêiner precisa de uma atualização.
Minha implementação 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
Scripts auxiliares
instalar
#!/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"]
começar
#!/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
Desenvolvi uma pequena ferramenta docker-run que é executada como contêiner de docker e pode ser usada para atualizar pacotes dentro de todos ou em contêineres em execução selecionados; também pode ser usada para executar qualquer comando arbitrário.
Pode ser facilmente testado com o seguinte comando:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
que por padrão executará o date
comando em todos os contêineres em execução e exibirá os resultados. Se você passar em update
vez exec
dele, será executado apt-get update
seguido por apt-get upgrade -y
todos os contêineres em execução