linux - Kubernetes Pod : Failed to get D-Bus Connection

标签 linux docker kubernetes systemd dbus

我有一个基于 centos/systemd 的 docker 容器。我运行容器

docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro <image>

然后我可以通过以下方式访问容器:

docker exec -ti <containerID> /bin/bash

然后我可以使用命令 systemctl 列出所有已加载的单元。这工作得很好。

现在我想将镜像部署到 kubernetes 集群中,这也可以正常工作,我可以通过 kubectl exec -ti <pod> /bin/bash 访问集群中正在运行的 pod

如果我现在输入命令 systemctl我收到错误消息

Failed to get D-Bus connection: Operation not permitted

如何才能使 systemd/systemctl 在 pod 中可用?

提示:由于软件在容器内运行,因此需要 systemd,因此此处不提供 Supervisord

最佳答案

令人遗憾的是,Daniel Walsh(Redhat)的旧提案仍然在流传 - 其中包括暗示运行“特权容器”来获得一些 systemd 行为,基本上是通过与容器外部的守护进程对话。

放弃那个。把它忘了吧。除非违反其基本设计,否则您无法在真正的集群中实现这一点。

而且在大多数情况下,仔细观察,容器中 systemd 的要求并不是很严格。有相当多的容器服务管理器或初始化守护进程实现。您可以尝试使用 docker-systemctl-replacement例如脚本。

关于linux - Kubernetes Pod : Failed to get D-Bus Connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56276014/

相关文章:

node.js - 在WORKDIR子目录的上下文中运行Docker CMD

mysql - 使用 Secrets 作为密码时无法连接到 Kubernetes 中的 mysql pod(访问被拒绝)

kubernetes - 从源代码运行kubernetes并配置云提供商

c - 我更改fs/myext2/file.c读写操作后,我的 'cat'、 'cp'、 'echo'都被kill掉了

c - 我如何将 "register"我的库 libfoo.so 与 `-lfoo` 链接起来?

linux - 如何验证 TCP 在 Linux 上保持事件状态

无法访问 Docker url

php - 在Web主机上通过PHP执行Linux命令?

mysql - 在 docker 中连接到 mysql 失败

angular - 在kubernetes入口上部署后,Angular应用程序出现mime错误并无法在浏览器上加载