Docker和systemd - 服务在10秒后停止

时间:2015-03-13 14:09:16

标签: service docker systemd

我很难让一个Docker容器在systemd启动时保持运行状态。当我使用sudo docker start containername手动启动它时,它会毫无问题地保持运行状态,但当它通过带有sudo systemctl start containername的systemd启动时,它会保持10秒钟然后神秘地死亡,在syslog中留下如下信息:

Mar 13 14:01:09 hostname docker[329]: time="2015-03-13T14:01:09Z" level="info" msg="POST /v1.17/containers/containername/stop?t=10"
Mar 13 14:01:09 hostname docker[329]: time="2015-03-13T14:01:09Z" level="info" msg="+job stop(containername)"

我假设它是systemd杀死进程,但我无法弄清楚它为什么会发生。 systemd单元文件(/etc/systemd/system/containername.service)非常简单,如下所示:

[Unit]
Description=MyContainer
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/bin/docker start containername
ExecStop=/usr/bin/docker stop containername

[Install]
WantedBy=multi-user.target

Docker在启动时启动很好,看起来甚至可以启动docker容器,但无论是在启动时还是手动启动,它都会在10秒后退出。帮助感激地收到了!

1 个答案:

答案 0 :(得分:2)

解决方案:在systemd脚本中使用时,start命令似乎需要-{(attach)参数,如in the documentation所述。我认为这是因为它默认为背景分叉,虽然systemd expect daemon feature似乎无法解决问题。

来自docker-start联机帮助页:

-a, --attach=true|false
   Attach container's STDOUT and STDERR and forward all signals to the process. The default is false.

然后整个systemd脚本变为:

[Unit]
Description=MyContainer
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/bin/docker start -a containername
ExecStop=/usr/bin/docker stop containername

[Install]
WantedBy=multi-user.target