Ubuntu docker container with upstart and syslog

2019-06-22 17:43发布

After searching around, I'm still confused whether you can have a docker container running Ubuntu with a working init system (upstart) and syslog, or not.

I know docker containers are meant for running a single process and not a full OS, but my use case is testing a daemon on various linux distros, making sure the daemon starts, stops and restarts successfully on crashes, etc., with logging to syslog. So I'm trying to decide if I can use a docker container for this or maybe I would be better of with Vagrant.

Some resources I found are confusing:

  • Container cannot connect to Upstart docker/docker#1024

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

  • Using Supervisor with Docker

    Traditionally a Docker container runs a single process when it is launched, for example an Apache daemon or a SSH server daemon. Often though you want to run more than one process in a container. There are a number of ways you can achieve this ranging from using a simple Bash script as the value of your container’s CMD instruction to installing a process management tool.

So basically what I need at the end is to be able to run:

$ initctl start <daemon>
$ initctl stop <daemon>

of course after creating the necessary conf file at /etc/init/<daemon>.conf, and see the logs with syslog.

1条回答
贪生不怕死
2楼-- · 2019-06-22 18:29

see https://github.com/BITPlan/docker-stackoverflowanswers/tree/master/33233329 to repeat the steps

Going from the Dockerfile

FROM ubuntu:14.04

building it:

docker build -t bitplan/ubuntutest:0.1 .
Sending build context to Docker daemon 2.048 kB
Step 0 : FROM ubuntu:14.04
---> 0a17decee413
Successfully built 0a17decee413

running it:

docker run -it bitplan/ubuntutest:0.1 /bin/bash

and checking the running services:

 root@50a738241d03:/# service --status-all
 [ ? ]  console-setup
 [ + ]  cron
 [ ? ]  killprocs
 [ ? ]  kmod
 [ ? ]  networking
 [ ? ]  ondemand
 [ - ]  procps
 [ ? ]  rc.local
 [ + ]  resolvconf
 [ - ]  rsyslog
 [ ? ]  sendsigs
 [ - ]  sudo
 [ - ]  udev
 [ ? ]  umountfs
 [ ? ]  umountnfs.sh
 [ ? ]  umountroot
 [ - ]  urandom

You can see that there are multiple services running in a typical OS based container. If you install more stuff like apache, mysql and the like than there will be more services.

So if you'd like to start more of these I'd recommend to use

service start service stop

which you'll find e.g. in the entrypoint of our docker-mediawiki image at:

https://github.com/BITPlan/docker-mediawiki/blob/master/docker-entrypoint.sh

see e.g.

service mysql start

in there.

查看更多
登录 后发表回答