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
