
Сегодня утром я проснулся и получил письмо от watchdog о том, что служба не работает. После подключения к серверу я обнаружил, что docker
служба не работает. После небольшого расследования я обнаружил, что сегодня утром Ubuntu выполнила автоматическое обновление службы containerd
, и после обновления docker
служба не была запущена автоматически.
Как я могу быть уверен, что после обновления это не повторится?
решение1
У нас была та же проблема. Я решил использовать файл юнита systemd, чтобы создать слабую зависимость между containerd и dockerd.
Вот как:
Как root:
Создайте каталог переопределения (разрешение 755)
mkdir /etc/systemd/system/containerd.service.d/
Создайте файл переопределения в указанном выше каталоге (права доступа 644)
vi override.conf
Добавьте в файл следующее
[Unit]
Before=docker.service
Wants=docker.service
Перезапустить демон systemd
systemctl daemon-reload
Проверьте, работает ли это
Остановить контейнерd
systemctl stop containerd
Проверьте, остановлен ли dockerd
systemctl status docker
Запустить контейнерd
systemctl start containerd
Проверьте, запущен ли dockerd
systemctl status docker
++++++++++++++++++++++++++
Некоторые ссылки на другую документацию по теме
https://www.shellhacks.com/systemd-service-file-example/
https://man7.org/linux/man-pages/man5/systemd.service.5.html
решение2
Я установил режим ожидания для Docker и связанных с ним пакетов, чтобы они обновлялись только при плановых обновлениях.
sudo apt-mark hold docker containerd
Когда я хочу обновить Docker, я запускаю apt-mark unhold
, обновляю пакеты и снова их удерживаю. У меня есть Ansible playbook для автоматизации этого процесса. Мой playbook для установки и настройки Docker устанавливает пакеты для удержания сразу после установки.
решение3
Theдокументацияпри использовании политик перезапуска Docker полезно запускать контейнеры с параметрами always
или unless-stopped
в зависимости от ваших целей.
Также представляется разумным запретить Ubuntu выполнять автоматические обновления.