J'ai eu le même problème et j'ai pensé qu'il peut être simplement résolu par un travail cron appelant unattended-upgrade
quotidiennement.
Mon intention est d'avoir cela comme une solution automatique et rapide pour garantir que le conteneur de production est sécurisé et mis à jour car cela peut me prendre un certain temps pour mettre à jour mes images et déployer une nouvelle image docker avec les dernières mises à jour de sécurité.
Il est également possible d'automatiser la création et le déploiement d'images avec des hooks Github
J'ai créé une image de docker de base avec laquelle vérifie et installe automatiquement les mises à jour de sécurité quotidiennement (peut être exécutée directement par docker run itech/docker-unattended-upgrade
).
Je suis également tombé sur une autre approche différente pour vérifier si le conteneur a besoin d'une mise à jour.
Ma mise en œuvre complète:
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 d'assistance
installer
#!/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"]
début
#!/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
Éditer
J'ai développé un petit outil docker-run qui fonctionne comme conteneur docker et peut être utilisé pour mettre à jour des packages à l'intérieur de tous les conteneurs en cours ou sélectionnés, il peut également être utilisé pour exécuter des commandes arbitraires.
Peut être facilement testé avec la commande suivante:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
qui par défaut exécutera la date
commande dans tous les conteneurs en cours d'exécution et affichera les résultats. Si vous passez à la update
place, exec
il s'exécutera apt-get update
suivi de apt-get upgrade -y
tous les conteneurs en cours d'exécution