【发布时间】:2015-04-24 01:58:35
【问题描述】:
当我在一个 Fedora 容器中使用 systemctl 时,我得到:
获取 D-Bus 连接失败:: 未知错误 -1
有人知道如何解决这个问题吗?或者 systemctl 不能在 docker 容器中使用吗?
【问题讨论】:
当我在一个 Fedora 容器中使用 systemctl 时,我得到:
获取 D-Bus 连接失败:: 未知错误 -1
有人知道如何解决这个问题吗?或者 systemctl 不能在 docker 容器中使用吗?
【问题讨论】:
systemctl 命令通过 DBus 连接与systemd 通信。您不太可能在容器中运行systemd,因此systemctl 无话可说。
虽然可能在容器中运行systemd,但这样做通常(但并非总是!)表明您需要重新考虑容器的架构。
【讨论】:
systemctl enable sshd,我必须先做ssh-keygen -A,然后再做/usr/sbin/sshd。
我已经修复了一个类似的问题,请查看this answer。
主要思想是让/usr/sbin/init成为容器内的第一个进程。
【讨论】:
如前所述,标准 systemctl 需要 SystemD。但是对于像“systemctl enable”这样的命令或启动服务进程,实际上是在没有运行 SystemD 的情况下这样做的。
“systemctl enable”本质上会在 sshd.service 文件中查找“WantedBy=multi-user.target”子句,然后在 /etc/systemd/system/multi-user.target.wants 中创建符号链接/。同样,“systemctl start”将在 ssh.service 文件中查找“ExecStart=/usr/bin/sshd”子句。
如果您不想查看并手动运行这些部分,您可以使用我来自 docker-systemctl-replacement 的 systemctl.py 助手,它可以为您解释 systemd 服务文件。
【讨论】: