Ubuntu Docker映像中的systemd和systemctl
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
容器中找不到。
我发现/lib/systemd
存在。
我尝试使用安装systemd apt-get install systemd libpam-systemd systemd-ui
。然后which
systemctl找到systemctl 16.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映像的任何文档,仅提供了有关从Ubuntu过渡Upstart
到的信息systemd
。是否有任何文档提供完整说明?
回答:
这是设计使然。Docker应该在容器的前台运行一个进程,它将在容器的pid名称空间中作为PID
1生成。Docker设计用于进程隔离,而不是用于OS虚拟化,因此容器中没有运行其他OS进程和守护程序(例如systemd,cron,syslog等),只有您运行的入口点或命令。
如果它们包含systemd命令,则您会发现很多东西都无法使用,因为您的入口点将其替换为init。Systemd还利用了docker限制容器内部的cgroups,因为更改cgroups的能力可以使进程逃避容器的隔离。如果没有在容器内以systemd的init身份运行,则没有守护进程来处理启动和停止命令。
以上是 Ubuntu Docker映像中的systemd和systemctl 的全部内容, 来源链接: utcz.com/qa/433943.html