Ich hatte das gleiche Problem und dachte, es kann einfach durch einen unattended-upgrade
täglichen Anruf gelöst werden .
Ich beabsichtige, dies als automatische und schnelle Lösung zu verwenden, um sicherzustellen, dass der Produktionscontainer sicher und aktualisiert ist, da ich einige Zeit benötigen kann, um meine Images zu aktualisieren und ein neues Docker-Image mit den neuesten Sicherheitsupdates bereitzustellen.
Es ist auch möglich, die Image-Erstellung und -Bereitstellung mit Github-Hooks zu automatisieren
Ich habe ein einfaches Docker-Image erstellt , das täglich automatisch Sicherheitsupdates überprüft und installiert (kann direkt von ausgeführt werden docker run itech/docker-unattended-upgrade
).
Ich bin auch auf einen anderen Ansatz gestoßen, um zu überprüfen, ob der Container aktualisiert werden muss.
Meine vollständige Implementierung:
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
Hilfsskripte
Installieren
#!/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"]
Anfang
#!/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
Bearbeiten
Ich habe ein kleines Docker- Tool entwickelt , das als Docker-Container ausgeführt wird und zum Aktualisieren von Paketen in allen oder ausgewählten laufenden Containern verwendet werden kann. Es kann auch zum Ausführen beliebiger Befehle verwendet werden.
Kann einfach mit dem folgenden Befehl getestet werden:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
Standardmäßig wird der date
Befehl in allen laufenden Containern ausgeführt und die Ergebnisse angezeigt. Wenn Sie update
stattdessen übergeben exec
, wird in allen laufenden Containern apt-get update
gefolgt von apt-get upgrade -y
ausgeführt