linux 如何解决Docker问题无法连接到总线:无此文件或目录

iswrvxsc  于 2023-01-12  发布在  Linux
关注(0)|答案(4)|浏览(350)

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

root@mytest:/Linux_Insight_Agent# systemctl start ir_agent.service

我已经安装了尼德软件包,但在启动服务时,以下问题即将到来。

Failed to connect to bus: No such file or directory
axkjgtzd

axkjgtzd1#

这是因为“systemctl”使用d-bus与systemd守护进程对话。在容器中没有systemd-daemon。请求启动可能不会完全达到您的预期-dev-mapping需要更长一点。
另一个解决方案是在docker-systemctl-replacement脚本的帮助下避免使用systemd守护进程,但是它会覆盖默认的systemctl。

q1qsirdb

q1qsirdb2#

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

docker run -it \
    --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
    --rm IMAGE /bin/bash

我希望对你有用...

93ze6v8z

93ze6v8z3#

https://itectec.com/ubuntu/ubuntu-systemctl-failed-to-connect-to-bus-docker-ubuntu16-04-container/
上面的链接提到了以下有意义的内容:
最佳答案
我假设你的码头集装箱是这样的
docker run -t -i ubuntu:16.04 /bin/bash
现在的问题是您的init进程PID 1是/bin/bash,而不是systemd。
除此之外,您还缺少dbus,这将是通信的方式。这就是您的错误信息的来源。但由于您的PID 1不是systemd,它将无助于安装dbus。
最好是重新考虑一下使用docker的方式,不要依赖systemd作为进程管理器,而是让docker容器在前台运行你想要的应用程序。

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

s6fujrry

s6fujrry4#

WSL的答案

在我的示例中,当将systemctl --user start docker-desktop作为Docker Desktop Ubuntu setup的一部分运行时,我在WSL中遇到了此错误

解释

systemctl是一个依赖于systemd的应用程序,systemd同样提供了一个在PID 1上运行的系统和服务管理器。默认情况下,这不是WSL的一部分,并且上面的systemctl命令失败。

Microsoft最近在WSL中发布了对systemd的支持,即发布here。这里,它们描述了如何激活systemd,我将在这里以分步版本的形式重现:

如何在WSL上激活systemctlsystemd

1.通过在Windows终端中运行wsl --version确保您运行的是WSL版本0.67.6或更高版本 (如果失败,需要升级到应用商店版本)
1.打开WSL并导航到Linux**/home目录。导航到/etc**
1.使用sudo权限打开(如有必要,创建)wsl.conf文件,例如通过nano:sudo nano wsl.conf
1.添加以下行:

[boot]
systemd=true

1.保存并关闭(在nano CTRL + 0CTRL + x中)
1.使用wsl.exe --shutdown关闭Windows终端中的WSL
1.等待8秒(参见8秒规则)
1.打开WSL
1.通过运行systemctl list-unit-files --type=service等命令来确保systemdsystemctl正在运行,该命令将显示您的服务状态。
至于我,我现在能够启动docker-desktop,没有任何错误。
希望这对其他人也有帮助。

相关问题