84

问题

它似乎systemd在 Ubuntu Docker 容器中不活跃或不可用。

设置

我正在从ubuntu:16.04ubuntu:16.10图像运行 Docker 容器。

测试

如果我执行:

systemctl status ssh16,04容器中

结果是错误Failed to connect to bus: No such file or directory

16.10容器中,错误是:bash: systemctl: command not found

如果我which systemctl在容器中找到 systemctl16.04但不在16.10容器中。

我发现了它的/lib/systemd存在。

我尝试使用以下方式安装 systemd:

apt-get install systemd libpam-systemd systemd-ui

然后which systemctl在里面找到systemctl16.10

systemctl status ssh仍然给出错误Failed to connect to bus: No such file or directory

问题

如何激活 systemd 和 systemctl 以在 Ubuntu Docker 映像中使用?

为什么 systemd 在 Ubuntu Docker 容器中不活动?实例化容器时不使用 systemd 吗?

我没有找到关于 Ubuntu / Ubuntu Docker 映像的任何关于此主题的文档,只有关于 UbuntuUpstartsystemd. 是否有任何文件给出完整的解释?

4

1 回答 1

84

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

如果它们包含 systemd 命令,您会发现很多事情都不起作用,因为您的入口点替换了 init。Systemd 还利用了 docker 限制在容器内部的 cgroups,因为更改 cgroups 的能力可以让进程摆脱容器的隔离。如果没有 systemd 在容器内作为 init 运行,就没有守护进程来处理您的启动和停止命令。

于 2016-08-26T15:34:52.917 回答