来自 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 run 最后一个参数/bin/bash和/usr/sbin/init有什么区别?(/usr/sbin/init 启动容器之后可以使用systemctl方法)
Docker容器systemctl启动服务报错Failed to get D-Bus connection: Operation not permitted