【问题标题】:Docker and systemd - service stopping after 10 secondsDocker 和 systemd - 服务在 10 秒后停止
【发布时间】:2015-05-16 01:29:11
【问题描述】:

我无法让 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 秒后退出。感谢您的帮助!

【问题讨论】:

  • 看看这个。在深入探讨这个问题之前,我离开了 docker。 github.com/ibuildthecloud/systemd-docker
  • 谢谢,我去看看!我解决了这个问题,但这很容易阻止我在未来陷入困境。

标签: service docker systemd


【解决方案1】:

解决方案:在 systemd 脚本中使用时,启动命令似乎需要 -a(附加)参数,如 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

【讨论】:

  • docker 客户端不会使用-d 分叉到后台,它只是完成并退出。容器在 docker 主机上运行,​​但 systemd 对此一无所知。
猜你喜欢
  • 2018-09-29
  • 2019-04-17
  • 2017-03-17
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多