我有一个docker-compose项目,我想通过systemd控制。 暴发户,我会用一个看起来像这样的脚本:
description "Start/Stop server" author "Jim Cortez" start on filesystem and started docker stop on runlevel [!2345] respawn limit 3 240 pre-start script # wait (if necessary) for our docker context to be accessible while [ ! -f /projects/my_server/docker-compose.yml ] do sleep 1 done /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d end script script sleepWhileAppIsUp(){ while docker ps | grep "$1" >/dev/null; do sleep 2 done } sleepWhileAppIsUp "my_server" end script # stop docker container after the stop event has completed post-stop script if docker ps | grep my_server; then /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop fi end script
(上面改编自这里 )
但是,我现在运行在运行Ubuntu 15.04的Docker主机上,该主机已经切换到systemd。 我怎样才能做到systemd服务脚本作为上述? 只需启动docker-compose守护进程,将不允许systemd在发生故障时跟踪和重新启动。
这是我到目前为止:
[Unit] Description=My Server container Requires=docker.service After=docker.service [Service] Restart=always ExecStart=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d ExecStop=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop [Install] WantedBy=local.target
我build议删除-d选项。 在这种情况下,您不需要在后台运行容器。
我发现:作者使用了类似的方法http://trackless.ca/2015/12/21/docker-compose-meets-systemd/ 。 另外,他还为每个docker服务人员创build了一个systemd服务。
您可能会考虑将您的docker-compose文件转换为多个systemd服务文件以摆脱docker-compose依赖关系: http : //container-transform.readthedocs.org/我使用了这种方法,它对于简单的设置工作正常。