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

时间:2016-11-10 13:28:47

标签: sockets docker opensuse systemctl

我已经基于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,我可以看到启动了很多服务(有些服务,比如邪恶,登录和模块,失败)。最后,容器向我提供了登录信息。登录后,我现在可以执行systemctl并显示具有各自状态的所有服务。

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

致以最诚挚的问候,

克里斯

您可以在SAP HANA Express Edition inside docker

找到此图片的回购

1 个答案:

答案 0 :(得分:0)

大多数当前的Linux系统依赖于SystemD运行,而systemctl将向其发送请求。但是,当我用一个只解释start / stop / status / enable命令的脚本替换systemctl二进制文件时,大多数应用程序都很容易安装。作为另一个好处,它不再需要那些复杂的启动命令来使得结果图像将systemd映射到容器中。可能会对你有所帮助吗?请查看docker-systemctl-replacement