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

4

我在使用systemd启动Docker容器时遇到了问题。当我手动使用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秒钟后就退出了。非常感谢您的帮助!


看看这个。在深入研究这个问题之前,我已经放弃了Docker。https://github.com/ibuildthecloud/systemd-docker - user2105103
谢谢,我会去看看!我已经解决了这个问题,但是这很容易让我在未来避免陷入困境。 - n00b
1个回答

3
解决方案:根据文档描述,在使用systemd脚本时,启动命令似乎需要-a(attach)参数。我猜这是因为它默认会分叉到后台,尽管systemd的expect daemon特性似乎无法解决此问题。

来自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

Docker客户端使用"-d"选项时不会分叉到后台运行,它只是完成并退出。容器仍在Docker主机上运行,但systemd对此一无所知。 - Adrian Mouat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接