来自 docker 容器内部的 systemctl 因 D-Bus 连接错误而失败

Posted

技术标签:

【中文标题】来自 docker 容器内部的 systemctl 因 D-Bus 连接错误而失败【英文标题】:systemctl from inside docker container fails with D-Bus connection error 【发布时间】:2017-03-24 13:18:58 【问题描述】:

我已经设置了一个基于 OpenSuse 12 的 docker 容器,安装了一些附加文件并将一些安装程序二进制文件复制到容器中。到目前为止一切都很好。

从容器的运行映像中,我现在需要运行上述设置程序,但这需要启动并运行 uuid.socket - uuid.socket 反过来需要 systemctl 才能正常工作,这会导致如下错误:

hxehost:/usr/sap/SRCFiles # systemctl
Failed to get D-Bus connection: Unknown error -1

我是这样启动 docker 容器的:

docker run -h hxehost -i -t f3096b0aa964 /bin/bash

根据一些帖子,应该启动机器容器而不是应用程序容器。

谁能告诉我我在这里做错了什么???如何让 systemctl 在 docker 容器中工作?

我尝试使用此命令启动容器,根据链接提示应该这样做,但无济于事

docker run --privileged --rm -ti -e 'container=docker' -h hxehost --network="bridge" --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro siliconchris/hxe:v0.0.2 /bin/bash

如果我这样做,systemctl 仍然会给出完全相同的错误。

如果我启动 /sbin/init 而不是 /bin/bash,我可以看到启动了相当多的服务(有些服务,如 wicked、login 和 module,失败)。最后,容器向我显示了一个登录信息。登录后,我现在可以执行 systemctl 并显示所有服务及其各自的状态。

现在我的下一个问题是:这种方法是否可行???

最好的问候,

克里斯

你可以在SAP HANA Express Edition inside docker找到这张图片的repo

【问题讨论】:

见github.com/docker/docker/issues/7459和github.com/docker/docker/pull/25567 您好 user2915097,感谢您的回答。不幸的是,我可能对 docker 太陌生了,因为我不明白。链接的条目谈论以特定方式运行容器,我这样做了: docker run --privileged --rm -ti -e 'container=docker' -h hxehost --network="bridge" --tmpfs /运行 --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro Siliconchris/hxe:v0.0.2 bin/bash 现在这并不能解决问题。仍然 systemctl 失败并出现完全相同的错误。我会相应地更新我的问题文本 【参考方案1】:

目前大多数Linux系统都依赖SystemD运行,systemctl会向它发送请求。但是,当我将 systemctl 二进制文件替换为仅解释启动/停止/状态/启用命令的脚本时,大多数应用程序都可以轻松安装。作为另一个好处,它不再需要那些复杂的启动命令来生成图像以将 systemd 映射到容器中。可能对你有帮助吗?请查看docker-systemctl-replacement。

【讨论】:

以上是关于来自 docker 容器内部的 systemctl 因 D-Bus 连接错误而失败的主要内容,如果未能解决你的问题,请参考以下文章

Docker下构建centos7容器无法使用systemctl命令的解决办法

docker 容器使用 systemctl 命令是报错

docker run 最后一个参数/bin/bash和/usr/sbin/init有什么区别?(/usr/sbin/init 启动容器之后可以使用systemctl方法)

Docker容器systemctl启动服务报错Failed to get D-Bus connection: Operation not permitted

Docker的四种网络模式和相关网络命令等操作

Docker的四种网络模式和相关网络命令等操作