在 fedora 容器 systemctl 中给出 Failed to get D-Bus connection

In fedora container systemctl gives Failed to get D-Bus connection

当我在 fedora 容器 systemctl 中使用时,我得到:

无法获得 D-Bus 连接::未知错误 -1

有人知道如何解决这个问题吗?或者不能在 docker 容器中使用 systemctl?

systemctl 命令通过 DBus 连接与 systemd 对话。您不太可能 运行宁 systemd 在您的容器中,因此 systemctl 无话可说。

虽然在容器中 可能 到 运行 systemd,但这样做通常(但不总是!)表明您需要重新思考容器的架构。

我已经解决了一个类似的问题,请查看 this answer

主要思想是使/usr/sbin/init成为容器内的第一个进程

如前所述,标准 systemctl 需要 SystemD。但是对于像 "systemctl enable " 这样的命令或启动服务进程,实际上不需要 运行ning SystemD。

"systemctl enable" 实际上会在 sshd.service 文件中查找 "WantedBy=multi-user.target" 子句,然后在 /etc/systemd/system/multi-user.target.wants/ 中创建一个符号链接。类似地,"systemctl start" 将在 ssh.service 文件中查找 "ExecStart=/usr/bin/sshd" 子句。

如果您不想手动查找和 运行 这些部分,您可以使用我的 systemctl.py 来自 docker-systemctl-replacement 的帮助程序,它可以解释 systemd 服务文件你.