如何解决Docker问题无法连接到总线:没有这样的文件或目录

Ash*_*ani 6 linux docker

尝试在 ubuntu 16.04 docker 容器中运行以下命令

root@mytest:/Linux_Insight_Agent# systemctl start ir_agent.service
Run Code Online (Sandbox Code Playgroud)

我已经安装了需要的软件包,但在启动服务时出现了以下问题。

Failed to connect to bus: No such file or directory
Run Code Online (Sandbox Code Playgroud)

Rua*_*ega 6

我遇到了同样的情况,在我的情况下,我通过使用--volume参数运行 docker 来解决。

例子:

docker run -it \
    --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
    --rm IMAGE /bin/bash
Run Code Online (Sandbox Code Playgroud)

我希望对你有用...


cao*_*aot 6

https://itectec.com/ubuntu/ubuntu-systemctl-failed-to-connect-to-bus-docker-ubuntu16-04-container/

上面的链接提到了以下内容,这是有道理的:

最佳答案

我假设你用类似的东西启动你的d​​ocker容器

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

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

除此之外,您还缺少 dbus 来进行通信。这就是您的错误消息的来源。但由于你的PID 1不是systemd,所以安装dbus没有帮助。

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

该脚本可用于覆盖“/usr/bin/systemctl”。它将在没有 SystemD 的情况下执行 systemctl 命令!


Gui*_*eim 5

那是因为“systemctl”使用 d-bus 与 systemd 守护进程对话。在容器中没有 systemd-daemon。要求开始可能不会完全符合您的预期 - 开发映射需要更长的时间。

另一种解决方案可能是在docker-systemctl-replacement脚本的帮助下避免使用 systemd 守护进程。然而,它会覆盖默认的 systemctl。