Я запускаю докер 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