Ubuntu Docker镜像中的systemd和systemctl

时间:2016-08-26 15:07:44

标签: ubuntu docker systemd ubuntu-server systemctl

似乎systemd在Ubuntu Docker镜像中不活跃或不可用。

我正在使用ubuntu:16.04ubuntu: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 systemctl16.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的信息。有没有文件给出完整的解释?

1 个答案:

答案 0 :(得分:48)

这是设计的。 Docker应该在容器的前台运行一个进程,它将在容器的pid命名空间中作为PID 1生成。 Docker专为进程隔离而设计,不适用于操作系统虚拟化,因此没有其他操作系统进程和守护进程在容器内运行(如systemd,cron,syslog等),只有您运行的入口点或命令。

如果它们包含systemd命令,那么由于您的入口点替换了init,因此您发现很多东西都不起作用。 Systemd还可以使用docker限制容器内部的cgroup,因为更改cgroup的能力可以允许进程逃脱容器的隔离。如果没有systemd作为init在容器内运行,那么没有守护进程来处理你的启动和停止命令。