看起来systemd
在Ubuntu Docker映像中不是主动的或不可用的。
我从ubuntu:16.04
和ubuntu: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.10
findsystemctl,但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镜像的文档,只有关于从Upstart
到systemd
的Ubuntu转换的信息。 有没有文件给出完整的解释?
这是设计。 Docker应该在容器的前台运行一个进程,并且在容器的pid命名空间中将会生成为PID 1。 Docker专门用于进程隔离,而不是用于OS虚拟化,所以在容器内部没有其他的OS进程和守护进程(比如systemd,cron,syslog等),只有你运行的入口点或命令。
如果他们包括systemd命令,你会发现很多东西无法工作,因为你的入口点取代了init。 Systemd也可以使用cgroups,docker会限制容器的内部,因为改变cgroups的能力可以允许一个进程逃避容器的隔离。 没有systemd作为你的容器中的init运行,没有守护进程来处理你的启动和停止命令。