Назад | Перейти на главную страницу

docker container systemd unit интеграция

Я запускаю докер app-контейнер-контейнер с навесным data-контейнер. Чтобы не отставать даже от обновлений хоста CoreOS, я использую файл модуля systemd, как показано ниже. Я немного озадачен, почему systemctl restart drone не работает.

Начальный запуск:

docker rm -f drone_data;
docker rm -f drone;
docker run --name "drone_data" drone_data sh;
docker run -d -p 1234:4321 --volumes-from=drone_data -v /var/run/docker.sock:/var/run/docker.sock --name "drone" drone

файл модуля systemctl:

Description=Drone CI (Docker Container)
Requires=docker.service
After=docker.service

[Service]
User=core
Restart=on-failure
RestartSec=10
ExecStart=/usr/bin/docker start drone
ExecStop=-/usr/bin/docker stop drone

[Install]
WantedBy=multi-user.target

Проблема в том -d опция, которая заставляет systemd полагать, что системный блок аварийно завершает работу, и удаляет процесс, который все еще работает в фоновом режиме.

Удаление -d должно сработать

https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/

Я бы не стал для этого создавать модуль Systemd. Docker уже охватывает этот вариант использования без добавления дополнительных настроек.

Вы можете указать демону докера перезапустить контейнер, если он существует, используя --restart=always в твоем run команда (https://docs.docker.com/engine/reference/run/#restart-policies-restart). Вам просто нужно включить демон docker (systemctl enable docker).

Ваша команда с использованием --restart=always будет выглядеть так: docker run -d --restart=always -p 1234:4321 --volumes-from=drone_data -v /var/run/docker.sock:/var/run/docker.sock --name "drone" drone