Miałem ten sam problem i pomyślałem, że można go po prostu rozwiązać, unattended-upgrade
codziennie dzwoniąc do pracy crona .
Zamierzam mieć to jako automatyczne i szybkie rozwiązanie zapewniające bezpieczeństwo i aktualizację kontenera produkcyjnego, ponieważ może to zająć trochę czasu, aby zaktualizować moje obrazy i wdrożyć nowy obraz dokera z najnowszymi aktualizacjami zabezpieczeń.
Możliwe jest również zautomatyzowanie budowania i wdrażania obrazu za pomocą haków Github
Stworzyłem podstawowy obraz dokera, który automatycznie sprawdza i instaluje codziennie aktualizacje zabezpieczeń (może być uruchamiany bezpośrednio przez docker run itech/docker-unattended-upgrade
).
Natknąłem się również na inne podejście, aby sprawdzić, czy kontener wymaga aktualizacji.
Moja pełna realizacja:
Plik Docker
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
Skrypty pomocnicze
zainstalować
#!/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"]
początek
#!/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
Edytować
Opracowałem małe narzędzie do uruchamiania dokerów, które działa jako kontener dokerów i może być używane do aktualizacji pakietów we wszystkich lub wybranych uruchomionych kontenerach, może także służyć do uruchamiania dowolnych poleceń.
Można go łatwo przetestować za pomocą następującego polecenia:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
który domyślnie wykona date
polecenie we wszystkich działających kontenerach i wyświetli wyniki. Jeśli podasz update
zamiast tego exec
, zostanie wykonany, apt-get update
a następnie apt-get upgrade -y
we wszystkich uruchomionych kontenerach