У меня возникла та же проблема, и я подумал, что ее можно просто решить, unattended-upgrade
ежедневно звоня на работу cron .
Я намерен использовать это в качестве автоматического и быстрого решения для обеспечения безопасности и обновления производственного контейнера, поскольку мне может потребоваться некоторое время, чтобы обновить мои образы и развернуть новый образ докера с последними обновлениями безопасности.
Также возможно автоматизировать сборку и развертывание образа с помощью хитов Github.
Я создал базовый образ докера, который автоматически проверяет и устанавливает обновления безопасности ежедневно (может запускаться напрямую docker run itech/docker-unattended-upgrade
).
Я также столкнулся с другим подходом, чтобы проверить, нуждается ли контейнер в обновлении.
Моя полная реализация:
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
Вспомогательные скрипты
устанавливать
#!/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"]
Начало
#!/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
редактировать
Я разработал небольшой инструмент docker-run, который запускается как докер-контейнер и может использоваться для обновления пакетов внутри всех или выбранных запущенных контейнеров, а также для запуска любых произвольных команд.
Может быть легко проверено с помощью следующей команды:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
который по умолчанию выполнит date
команду во всех запущенных контейнерах и отобразит результаты. Если вы передадите update
вместо exec
него, будет выполняться apt-get update
после apt-get upgrade -y
во всех запущенных контейнерах