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

Docker 在容器中运行服务(upstart/init.d),docker,init,upstart,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管理这些服务,以便重新启动功能和upstart发出事件来工作 由于docker似乎不支持这一点,我正在考

我试图在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中的所有服务并跟踪PIDs的做法。这并不能解决缺少upstart发出事件的问题


还有其他关于如何在docker中启动upstart流程的想法吗?

您肯定能够做到这一点。这真的不是“Docker方式”,但很有可能。您可能需要简单地考虑使用基本图像,它支持“代码> Runt< /Cube >内置。如果您更愿意使用upstart,只需看看他们是如何实现入口点的,
/sbin/myinit
,并遵循这一点。

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

这说明:

如果您的应用程序使用upstart,这将不适合裸docker映像,如果它们转移/sbin/init或 /sbin/initctl设置为类似/bin/true或/dev/null的值。 如果这个应用程序有一个老式的systemV initscript,并且没有使用initctl命令,那么您可以使用服务来启动它 转移

在salt minion的例子中,ubuntu的包装使用了一个暴发户 作业,没有经典的init脚本,所以它不会在中启动是正常的 这两种情况

并说:

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


docker的理念是运行一个流程,如果您想运行多个流程,请看一看supervisor supervisor似乎与upstart(upstart)基本相同(如果不是子集的话),但感谢您的指示;这可能是必须的。给定一个大型的init脚本遗留系统,转换它们并不理想,也不可能作为单独的Docker运行它们。