似乎systemd
在Ubuntu Docker镜像中不活跃或不可用。
我正在使用ubuntu:16.04
和ubuntu:16.10
图像运行Docker容器。
如果我在systemctl status ssh
容器中执行16,04
,则结果为错误Failed to connect to bus: No such file or directory
。在16.10
容器中,错误为bash: systemctl: command not found
。
如果我which systemctl
16.04
容器中找到了systemctl,而16.10
容器中找不到。{/ p>
我发现/lib/systemd
存在。
我尝试使用apt-get install systemd libpam-systemd systemd-ui
安装systemd。然后which systemctl
在16.10
中找到了systemctl,但systemctl status ssh
仍然提供错误Failed to connect to bus: No such file or directory
我的主要问题是:如何激活systemd和systemctl以在Ubuntu Docker镜像中使用?
为什么systemd在Ubuntu Docker容器中不活动? systemd不用于实例化容器吗?
我没有找到关于Ubuntu / Ubuntu Docker镜像的任何关于此主题的文档,只有关于Ubuntu从Upstart
过渡到systemd
的信息。有没有文件给出完整的解释?
答案 0 :(得分:48)
这是设计的。 Docker应该在容器的前台运行一个进程,它将在容器的pid命名空间中作为PID 1生成。 Docker专为进程隔离而设计,不适用于操作系统虚拟化,因此没有其他操作系统进程和守护进程在容器内运行(如systemd,cron,syslog等),只有您运行的入口点或命令。
如果它们包含systemd命令,那么由于您的入口点替换了init,因此您发现很多东西都不起作用。 Systemd还可以使用docker限制容器内部的cgroup,因为更改cgroup的能力可以允许进程逃脱容器的隔离。如果没有systemd作为init在容器内运行,那么没有守护进程来处理你的启动和停止命令。