Ho avuto lo stesso problema e ho pensato che potesse essere semplicemente risolto chiamando un lavoro cron unattended-upgrade
quotidianamente.
La mia intenzione è quella di avere questo come soluzione automatica e rapida per garantire che il contenitore di produzione sia sicuro e aggiornato perché può volerci un po 'di tempo per aggiornare le mie immagini e distribuire una nuova immagine docker con gli ultimi aggiornamenti di sicurezza.
È anche possibile automatizzare la generazione e la distribuzione dell'immagine hook di Github
Ho creato un'immagine docker di base che controlla e installa automaticamente gli aggiornamenti di sicurezza ogni giorno (può essere eseguita direttamente dadocker run itech/docker-unattended-upgrade
).
Mi sono anche imbattuto in un altro approccio diverso per verificare se il contenitore necessita di un aggiornamento.
La mia completa implementazione:
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
Script di supporto
installare
#!/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"]
inizio
#!/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
modificare
Ho sviluppato una piccola finestra mobile di strumenti che viene eseguita come contenitore docker e che può essere utilizzata per aggiornare i pacchetti all'interno di tutti o contenitori in esecuzione selezionati, ma può anche essere utilizzata per eseguire qualsiasi comando arbitrario.
Può essere facilmente testato con il seguente comando:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
che per impostazione predefinita eseguirà il date
comando in tutti i contenitori in esecuzione e visualizzerà i risultati. Se si passa update
invece exec
si eseguirà apt-get update
seguito da apt-get upgrade -y
in tutti i contenitori in esecuzione