Я работаю со многими сервисами (базами данных, веб-серверами ...), реализованными посредством контейнеров Docker через модули systemd. Это работает, но системе требуется очень много времени для выключения, по-видимому, ожидая завершения работы служб докера.
Вот пример модуля systemd, который я сделал на виртуальной машине под Debian Stretch с Docker CE:
/lib/systemd/system/mariadb.service
[Unit]
Description=MariaDB
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
Restart=always
ExecStart=/usr/bin/docker run --rm \
--name=mariadb \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=test \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=user \
-v /var/lib/mysql:/var/lib/mysql \
mariadb:latest
ExecStop=-/usr/bin/docker stop mariadb # See UPDATEs 1 & 2
[Install]
WantedBy=multi-user.target
Служба запускается и останавливается правильно в считанные секунды, когда я использую команду systemctl. Но когда я выключаю систему, она показывает:
Это длится более 3 минут. Это может быть дольше, если через systemd запущено много контейнеров.
Проблема не характерна для MariaDB.
Есть ли лучший способ обрабатывать док-контейнеры через systemd, избегая дополнительного времени выключения?
ОБНОВЛЕНИЕ 1: как предложил Беннетт Хардвик в комментарии, я попытался удалить директиву ExecStop из определения службы. Кажется, лучше, так как обслуживание останавливается после 1 минуты 30, а не 3 минут.
ОБНОВЛЕНИЕ 2: я попытался добавить опцию -t к команде остановки докера в директиве ExecStop (https://docs.docker.com/engine/reference/commandline/stop/). Это не имеет никакого эффекта.