【问题标题】:Docker containers gone after a while in CoreOSDocker 容器在 CoreOS 中消失了一段时间
【发布时间】:2016-01-25 21:54:04
【问题描述】:

我有几个在 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 上发生这种情况的信息。请,任何帮助表示赞赏!

附:我的 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

【问题讨论】:

  • journalctl 向您展示了什么? journalctl -u szeremi.service
  • 您是通过登录节点直接使用systemd,还是使用Fleet之类的调度程序?
  • 直接。我把它复制到 /etc/systemd/system
  • @AttilaSzeremi 我提交了一个答案,表明需要启用服务才能使其持续启动。

标签: docker digital-ocean systemd coreos


【解决方案1】:

登录时报告的失败 sshd 单元是针对 CoreOS 上 systemd 套接字激活的 sshd 尝试登录失败的结果。它们与丢失的 docker 容器无关。

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

如果系统重启过,之后容器没有重启过,可以重点排查systemd单元文件和服务启动。如果它没有重新启动,容器日志(例如,docker logs szeremi)和服务的日志(例如,systemctl status -l szeremi.service)是可能的开始位置。 freenode 上的#coreos 或coreos-users mailing list 都会让人们准备好在任何一种情况下提供帮助。

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2022-01-25
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多