【发布时间】:2017-01-03 07:26:03
【问题描述】:
问题
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 systemctl 在16.04 容器中找到,但在16.10 容器中找不到。
我发现/lib/systemd 存在。
我已尝试使用以下方式安装 systemd:
apt-get install systemd libpam-systemd systemd-ui
然后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 的转换的信息。有没有提供完整解释的文档?
【问题讨论】:
-
如果您想要一个功能齐全的初始化系统,请使用虚拟机。
-
有几个提议可以在容器内模拟 PID-1 的 init 系统。基本上,它应该对“docker stop”发送的 SIGTERM 做出反应,将其分发给容器中的其他进程。它应该能够从被杀死的后台进程中获取僵尸。 => 现在只剩下选择其中一种实现了。有些只是在 C/C++ 中移植一个真正的“init”,另一些正在用高级语言围绕 signal(3) 和 waitpid(3) 编写一些脚本——Python 的“signal”标准库也适用于此。 (如我的 docker-systemctl-replacement 脚本所示)
-
使用
docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro <image>和systemctl运行 docker 镜像工作正常
标签: ubuntu docker systemd ubuntu-server systemctl