尝试在ubuntu 16.04 docker容器中运行以下命令
root@mytest:/Linux_Insight_Agent# systemctl start ir_agent.service
我已经安装了尼德软件包,但在启动服务时,以下问题即将到来。
Failed to connect to bus: No such file or directory
axkjgtzd1#
这是因为“systemctl”使用d-bus与systemd守护进程对话。在容器中没有systemd-daemon。请求启动可能不会完全达到您的预期-dev-mapping需要更长一点。另一个解决方案是在docker-systemctl-replacement脚本的帮助下避免使用systemd守护进程,但是它会覆盖默认的systemctl。
q1qsirdb2#
在我的案例中,我遇到了同样的情况,我通过使用--volume参数运行docker来解决。示例:
--volume
docker run -it \ --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \ --rm IMAGE /bin/bash
我希望对你有用...
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容器在前台运行你想要的应用程序。
docker run -t -i ubuntu:16.04 /bin/bash
此脚本可用于覆盖"/usr/bin/systemctl "。它将在没有SystemD的情况下执行systemctl命令!
s6fujrry4#
在我的示例中,当将systemctl --user start docker-desktop作为Docker Desktop Ubuntu setup的一部分运行时,我在WSL中遇到了此错误
systemctl --user start docker-desktop
systemctl是一个依赖于systemd的应用程序,systemd同样提供了一个在PID 1上运行的系统和服务管理器。默认情况下,这不是WSL的一部分,并且上面的systemctl命令失败。
systemctl
systemd
Microsoft最近在WSL中发布了对systemd的支持,即发布here。这里,它们描述了如何激活systemd,我将在这里以分步版本的形式重现:
1.通过在Windows终端中运行wsl --version确保您运行的是WSL版本0.67.6或更高版本 (如果失败,需要升级到应用商店版本)1.打开WSL并导航到Linux**/home目录。导航到/etc**1.使用sudo权限打开(如有必要,创建)wsl.conf文件,例如通过nano:sudo nano wsl.conf1.添加以下行:
wsl --version
sudo nano wsl.conf
[boot] systemd=true
1.保存并关闭(在nano CTRL + 0和CTRL + x中)1.使用wsl.exe --shutdown关闭Windows终端中的WSL1.等待8秒(参见8秒规则)1.打开WSL1.通过运行systemctl list-unit-files --type=service等命令来确保systemd和systemctl正在运行,该命令将显示您的服务状态。至于我,我现在能够启动docker-desktop,没有任何错误。希望这对其他人也有帮助。
CTRL + 0
CTRL + x
wsl.exe --shutdown
systemctl list-unit-files --type=service
4条答案
按热度按时间axkjgtzd1#
这是因为“systemctl”使用d-bus与systemd守护进程对话。在容器中没有systemd-daemon。请求启动可能不会完全达到您的预期-dev-mapping需要更长一点。
另一个解决方案是在docker-systemctl-replacement脚本的帮助下避免使用systemd守护进程,但是它会覆盖默认的systemctl。
q1qsirdb2#
在我的案例中,我遇到了同样的情况,我通过使用
--volume
参数运行docker来解决。示例:
我希望对你有用...
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命令!
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上激活
systemctl
和systemd
1.通过在Windows终端中运行
wsl --version
确保您运行的是WSL版本0.67.6或更高版本 (如果失败,需要升级到应用商店版本)1.打开WSL并导航到Linux**/home目录。导航到/etc**
1.使用sudo权限打开(如有必要,创建)wsl.conf文件,例如通过nano:
sudo nano wsl.conf
1.添加以下行:
1.保存并关闭(在nano
CTRL + 0
和CTRL + x
中)1.使用
wsl.exe --shutdown
关闭Windows终端中的WSL1.等待8秒(参见8秒规则)
1.打开WSL
1.通过运行
systemctl list-unit-files --type=service
等命令来确保systemd
和systemctl
正在运行,该命令将显示您的服务状态。至于我,我现在能够启动docker-desktop,没有任何错误。
希望这对其他人也有帮助。