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

Nei*_*ill 9 init upstart docker

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

initctl: Unable to connect to Upstart:
Failed to connect to socket /com/ubuntu/upstart: Connection refused
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 12

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

这个问题解释了:

如果你的应用程序使用upstart,这不适合裸坞坞映像,如果它们将/ sbin/init或/ sbin/initctl转移到/ bin/true或/ dev/null之类的东西,那就更好了.如果此应用程序具有旧的学校systemV initscript并且initctl命令尚未转移,则应用程序可以使用服务启动.

在salt-minion的情况下,在ubuntu上,包装使用了一个upstart作业而没有经典的init脚本,因此在两种情况下它都不会启动是正常的.

这其中说:

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


Abd*_*aly 3

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