docker 容器 systemd 单元集成

docker 容器 systemd 单元集成

我运行一个app带有附加data容器的 docker -container 容器。为了在 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

答案1

问题在于该-d选项,它使 systemd 认为系统单元崩溃并删除仍在后台运行的进程。

删除应该-d可以

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

答案2

我不会为此创建 Systemd 单元。Docker 已经涵盖了该用例,无需添加额外配置。

--restart=always你可以使用命令告诉 docker daemon 在容器存在时重新启动它runhttps://docs.docker.com/engine/reference/run/#restart-policies-restart)。你只需要启用docker daemon(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

相关内容