Docker容器在CoreOS中消失了一段时间

时间:2016-01-25 21:54:04

标签: docker digital-ocean systemd coreos

我在CoreOS beta(899.5.0)上运行了几个小项目

现在我第二次遇到这种情况,我有3个容器正在运行。一切都很好,花花公子。然后在没有查看该服务器上的我的网站几天后,我注意到当我尝试访问它们时页面已关闭。

当我在Digital Ocean上登录我的CoreOS机器并输入docker ps时,我注意到我的所有容器都消失了!这太疯狂了。

我甚至为其中几个设置了systemd服务,这样如果它们因任何原因终止,它们应该再次运行。但他们没有。

我确实看到了这个,但是当我登录时问候我;我不确定它是否与它有关:

Last login: Sun Jan 17 23:42:37 2016 from 81.106.109.70
CoreOS beta (899.5.0)
Failed Units: 13
  sshd@1509-178.62.0.199:22-219.219.114.120:14536.service
  sshd@1541-178.62.0.199:22-219.219.114.120:30158.service
  sshd@1581-178.62.0.199:22-219.219.114.120:17539.service
  sshd@1995-178.62.0.199:22-122.224.34.168:1397.service
  sshd@1996-178.62.0.199:22-122.224.34.168:3789.service
  sshd@2002-178.62.0.199:22-122.224.34.168:2983.service
  sshd@230-178.62.0.199:22-219.219.114.120:51826.service
  sshd@259-178.62.0.199:22-219.219.114.120:38882.service
  sshd@309-178.62.0.199:22-219.219.114.120:34654.service
  sshd@326-178.62.0.199:22-219.219.114.120:21256.service
  sshd@346-178.62.0.199:22-219.219.114.120:39645.service
  sshd@364-178.62.0.199:22-219.219.114.120:63277.service
  sshd@791-178.62.0.199:22-219.219.114.120:37294.service

我无法在Google上找到有关CoreOS的任何信息。拜托,欢迎任何帮助!

P.S。我的systemd配置如下所示:

szeremi.service

[Unit]
Description=Run %p
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm -f %p
ExecStart=/usr/bin/docker run -t --rm --name %p \
  -p 80:8080 \
  amcsi/szeremi
ExecStop=/usr/bin/docker stop %p

[Install]
WantedBy=multi-user.target

编辑:日志文件的最新页面(journalctl -u szeremi.service)是:https://gist.github.com/amcsi/95c8b0eb71de2f44c16b#file-journalctl-u-szeremi-service

2 个答案:

答案 0 :(得分:2)

登录时报告的失败sshd单元是针对CoreOS上systemd socket-activated sshd的登录尝试失败的结果。它们与丢失的码头集装箱无关。

容器似乎正在消失"系统重新启动后执行自动更新。这是更新的默认设置,这些更新在测试版频道上以某种频率发生。您可以使用uptime或类似命令检查系统重新启动的最近时间。

如果系统已重新启动且之后未重新启动容器,则可以将故障排除重点放在systemd单元文件和服务启动上。如果它没有重新启动,则容器日志(例如docker logs szeremi)和服务的日志(例如,systemctl status -l szeremi.service)可能是开始的地方。 freenode上的#coreos或coreos-users mailing list都会让人们随时准备提供帮助。

答案 1 :(得分:1)

CoreOS使用systemd来定义主机上的进程。您举例说明的服务文件是service unit,它定义了如何运行docker容器。如果您通过直接登录CoreOS节点直接使用systemd,则必须enable该服务才能使其在引导期间保持不变。 systemctl程序的enable子命令将一个单元作为参数,并在systemd目标文件结构中创建一个符号链接。当systemd启动时,它会启动给定目标中的任何服务。这可确保在启动时启动给定服务。

systemctl enable szeremi.service   # Creates a symlink within systemd 
systemctl start szeremi.service    # Starts the service => runs container