我运行一个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 在容器存在时重新启动它run
(https://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