数字海洋水滴内的所有容器停止

时间:2016-03-17 13:09:26

标签: docker digital-ocean systemd coreos

我有一个Digital Ocean Droplet,我运行4个容器,每个容器都有一个小的python应用程序。

不时(一周或两周一次),所有容器都停止工作。它不是由内部的python应用程序引起的。

我做了一个systemd计时器,每30分钟执行一次bash脚本来检查容器是否正在运行,如果没有,则启动它们。 计时器工作了几天,它永远不必重新启动容器。

但是,有一天,我ssh到我的液滴,看到容器停止 - 和 systemctl list-timers --all 告诉我计时器从系统计时器中消失了!它已经不存在了!

容器检查脚本正在写日志,日志在容器停止的同时停止。

问题:

  1. 如何找出阻止我的容器的原因?

  2. 系统计时器怎么可能消失了?

  3. 如何解决此问题?

  4. 我是唯一一个可以砸到那个水滴的人,所以其他人也无法搞砸它。

1 个答案:

答案 0 :(得分:2)

当新版本的操作系统可用时,CoreOS群集会自行重启。这意味着如果您手动在CoreOS机器上启动进程,某些时候它可能会消失。

好消息是,有一种标准方法可以在CoreOS上运行进程,这些进程将在机器运行时恢复 - 也就是说,您可以使用systemd单元。 CoreOS描述了哪些单元以及如何在这里使用它们:https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/

简而言之,您可以分三步创建自己的单位:

在/ etc / systemd / system中放置一个特殊格式的文件 - 最简单的可能是

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

[Service]
ExecStart=/usr/bin/docker run mycontainer

[Install]
WantedBy=multi-user.target

然后,您将要设置系统,以便它将使用

读取该文件(并运行您的容器)
$ sudo systemctl enable foo.service
$ sudo systemctl start hello.service

链接中的文档有更多细节(我强烈建议您在开始之前先看一下它 - 它很简短!)