在容器中运行服务(upstart / init.d)

时间:2015-01-20 21:46:30

标签: docker init upstart

我正在尝试在docker中启动一个具有许多init和upstart服务的系统,我收到了这个错误。

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

所有的解决方法都建议与/ bin / true建立硬链接以使错误无效。但我需要让upstart管理这些服务以实现restart-ability和upstart发出事件才能工作......

因为似乎docker不支持这个,我正在考虑编写脚本以启动/etc/rcX.d中的所有服务并跟踪PID的严重破解。这并不能解决来自暴发户的缺乏发射事件的问题。

如何在docker中启动upstart进程?

2 个答案:

答案 0 :(得分:12)

不幸的是,upstart在docker容器中不起作用,因为它们对init系统有些神奇。

issue解释了:

  

如果你的应用程序使用upstart,这不适用于裸码头图像,如果他们转移/ sbin / init或更多   / sbin / initctl类似于/ bin / true或/ dev / null。       如果此应用程序具有旧的学校systemV initscript并且未执行initctl命令,则应用程序可以使用服务启动   转向。

     

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

this one说:

  

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

答案 1 :(得分:3)

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