服务器 - systemctl无法连接到总线 - Docker ubuntu:16.04容器

分享于 

3分钟阅读

ubuntu

  繁體

问题:

我试图在ubuntu:16.04 Docker容器中使用systemctl命令,我运行了以下命令...


systemctl status ssh



得到错误。


Failed to connect to bus: No such file or directory



这为什么不能工作?这是否与Ubuntu在Docker容器中运行相关?如何让systemctl正常工作?


答案1:


docker run -t -i ubuntu:16.04 /bin/bash



现在问题是你的init进程PID 1是/bin/bash,而不是systemd,用ps aux确认。

这是错误消息的来源,

最好是重新考虑使用Docker的方式,不要依赖systemd作为进程管理器,而是让Docker容器在前台运行所需的应用程序。


答案2:

启动终端,并键入:

 
$ env



你看到这样的环境变量了吗?


XDG_RUNTIME_DIR=/run/user/`id -u`



如果环境变量XDG_RUNTIME_DIR不存在,你需要创建它。


答案3

如果在Windows子系统Linux (WSL )中收到这个错误,我发现是因为Docker不支持它,这是因为缺少cgroup和其他先决条件。


答案4

试试这个:


docker run -ti -d --privileged=true images_docker "/sbin/init"



或者


docker run -ti -d --privileged=true images_docker



同样的结果。

默认情况下,Docker容器为"无权限",不能在Docker容器内部运行Docker守护进程,这是因为默认情况下,不允许容器访问设备,但会给"有权限"容器访问所有设备(请参阅cgroups设备的文档)。

当执行docker run--privileged时,docker将启用对主机上所有设备的访问,并在AppArmor或SELinux中设置一些配置,允许容器对主机的访问与在主机上容器外运行的进程几乎相同,有关使用--privileged运行的其他信息可以在Docker博客上找到。


答案5

您可能没有运行systemd,这是16.04上init的默认实现。如果从14.04升级,则很可能仍在运行upstart,运行systemctl命令的就会输出错误。



Server  DOC  SYS  系统  Docker  DOCK