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

我试图在docker中启动一个系统,它有许多init和upstart服务,我得到这个错误。

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

所有的解决方法都build议与/ bin / truebuild立一个硬连接来消除错误。 但是我需要让这些服务由新贵来pipe理,以便重新启动,并让新贵发生事件…

由于Docker似乎并不支持这一点,所以我正在考虑编写脚本来启动/etc/rcX.d中的所有服务,并跟踪这些PID。 这并不能解决暴发事件的不足。

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

不幸的是,新贵在Docker容器内不起作用,因为它们对init系统有一些魔力。

这个问题解释了:

如果您的应用程序使用暴发户,这将不适合裸露的docker图像,甚至更多,如果他们将/ sbin / init或/ sbin / initctl转移到像/ bin / true或/ dev / null的东西。 如果这个应用程序有一个旧系统,并且initctl命令没有被转移,那么你的应用程序可以使用服务来启动。

在salt-minion的情况下,在ubuntu上,这个包装使用了一个新兴的工作,没有经典的init脚本,所以在两种情况下都不会启动。

这个人说:

因为Docker用自己的replace了默认的/ sbin / init,所以没有办法在Docker容器中运行Upstart init。

你一定能够做到这一点。 这实际上不是“Docker Way”的方式,但它是非常可能的。 你可能想要考虑简单地使用phusion / baseimage基础镜像,它支持内置的runit 。如果你想用upstart看看他们是如何实现入口点/sbin/myinit/sbin/myinit遵循这一点。

Interesting Posts