【问题标题】:Running services (upstart/init.d) in a container在容器中运行服务(upstart/init.d)
【发布时间】:2015-03-19 07:02:34
【问题描述】:

我正在尝试在 docker 中启动一个具有许多 init 和 upstart 服务的系统,但出现此错误。

initctl: Unable to connect to Upstart:
Failed to connect to socket /com/ubuntu/upstart: Connection refused

所有变通方法都建议建立到 /bin/true 的硬链接以消除错误。但是我需要让这些服务由 upstart 管理,以实现重启能力和 upstart 发出事件的工作......

由于 docker 似乎不支持这一点,我正在考虑编写脚本以启动 /etc/rcX.d 中的所有服务并跟踪 PID 的严重黑客攻击。这并不能解决暴发户缺乏发射事件的问题。

任何其他想法如何在 docker 中启动新贵进程?

【问题讨论】:

  • docker的哲学是运行一个进程,如果你想运行几个,看看supervisor docs.docker.com/articles/using_supervisord
  • supervisor 似乎几乎等同于暴发户的一个子集,但感谢您的指点;它可能必须这样做。给定一个大型的 init 脚本遗留系统,将它们转换过来并不理想,也不可能将它们作为单独的 docker 运行。

标签: docker init upstart


【解决方案1】:

不幸的是,upstart 不能在 docker 容器内工作,因为它们对 init 系统有一些魔力。

issue 解释:

如果您的应用程序使用 upstart,这将不适合裸 docker 映像,如果它们转移 /sbin/init 或 /sbin/initctl 到 /bin/true 或 /dev/null 之类的东西。 如果这个应用程序有一个老式的 systemV initscript 并且 initctl 命令没有被启动,你的应用程序可以使用服务来启动 转移了。

在 salt-minion 的情况下,在 ubuntu 上,包装使用暴发户 工作并且没有经典的初始化脚本,所以它不会启动是正常的 两种情况。

this one 说:

因为 Docker 用自己的替换了默认的 /sbin/init,所以有 无法在 Docker 容器中运行 Upstart 初始化。

【讨论】:

    【解决方案2】:

    您绝对应该能够做到这一点。这真的不是“Docker Way”的方式,但很有可能。您可能想考虑简单地使用phusion/baseimage 基础映像,它支持内置runit。如果您更愿意使用upstart,只需看看他们如何实现入口点/sbin/myinit,然后关注那个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      相关资源
      最近更新 更多