systemd和systemctl在Ubuntu Docker映像中

看起来systemdUbuntu Docker映像中不是主动的或不可用的。

我从ubuntu:16.04ubuntu:16.10镜像运行Docker容器。

如果我在16,04容器中执行systemctl status ssh ,结果是错误Failed to connect to bus: No such file or directory的错误Failed to connect to bus: No such file or directory 。 在16.10容器中,错误是bash: systemctl: command not found

如果我在16.04容器中findwhich systemctl systemctl,而不是在16.10容器中。

我发现/lib/systemd存在。

我试过用apt-get install systemd libpam-systemd systemd-ui 。 然后systemctl在16.10findsystemctl,但systemctl status ssh仍然给出错误Failed to connect to bus: No such file or directory

我的主要问题是:如何激活systemd和systemctl在Ubuntu Docker镜像中使用?

为什么systemd在Ubuntu Docker容器中不活跃? systemd没有用于实例化容器?

我没有find有关Ubuntu / Ubuntu Docker镜像的文档,只有关于从Upstartsystemd的Ubuntu转换的信息。 有没有文件给出完整的解释?

这是设计。 Docker应该在容器的前台运行一个进程,并且在容器的pid命名空间中将会生成为PID 1。 Docker专门用于进程隔离,而不是用于OS虚拟化,所以在容器内部没有其他的OS进程和守护进程(比如systemd,cron,syslog等),只有你运行的入口点或命令。

如果他们包括systemd命令,你会发现很多东西无法工作,因为你的入口点取代了init。 Systemd也可以使用cgroups,docker会限制容器的内部,因为改变cgroups的能力可以允许一个进程逃避容器的隔离。 没有systemd作为你的容器中的init运行,没有守护进程来处理你的启动和停止命令。