问题:
我试图在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命令的就会输出错误。