我有一个基于 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/