Running services (upstart/init.d) in a container
Asked Answered
R

2

9

I'm trying to launch a system in docker that has many init and upstart services and I get this error.

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

All the workarounds suggest making a hard link to /bin/true to silence the error. But I need to have these services managed by upstart for restart-ability and for upstart emit events to work...

As it seems docker does not support this, I'm considering the gross hack of writing a script to launch all the services in /etc/rcX.d and keep track of the PIDs. That doesn't solve lack of emit events from upstart.

Any other ideas how to launch upstart processes in docker?

Restive answered 20/1, 2015 at 21:46 Comment(2)
The philosophy of docker is to run a process, if you want to run several, have a look at supervisor docs.docker.com/articles/using_supervisordBunt
supervisor seems mostly equivalent, if not a subset, of upstart, but thanks for the pointer; it might have to do. Given a large legacy system of init scripts, it's not ideal to convert them over and not doable to run them as individual dockers.Restive
B
12

Unfortunately, upstart does not work inside of a docker container because they do some magic with the init system.

This issue explains:

If your application uses upstart, this wont fit well in bare docker images, and even more if they divert /sbin/init or /sbin/initctl to something like /bin/true or /dev/null. You application may use service to start if this one has an old school systemV initscript and if the initctl command has not been diverted.

In the case of salt-minion, on ubuntu the packaging uses an upstart job and no classical init script so it is normal that it wont start in both cases.

And this one says:

Because Docker replaces the default /sbin/init with its own, there's no way to run the Upstart init inside a Docker container.

Barren answered 15/4, 2015 at 1:20 Comment(0)
C
3

You should definitely be able to do that. It's really not the way "Docker Way" but it's very possible. You might want to consider simply using the phusion/baseimage base image, it's got support for runit built in. If you'd rather use upstart just look at how they've implemented the entrypoint, /sbin/myinit, and follow that.

Chairman answered 21/1, 2015 at 5:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.