我运行一个附加data容器的dockerapp容器容器。 为了保持它与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/
我不会为此创build一个Systemd单位。 Docker已经覆盖了这个用例而不需要增加额外的configuration。
你可以告诉docker守护进程在你的run命令( https://docs.docker.com/engine/reference/run/#restart-policies-restart )中使用--restart=always来重启容器。 你只需要启用systemctl enable docker守护进程( systemctl enable docker )。
使用--restart=always命令--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