【发布时间】:2019-10-10 01:47:59
【问题描述】:
我有一个基于 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 我会收到错误消息
获取 D-Bus 连接失败:不允许操作
如何使 systemd/systemctl 在 pod 中可用?
提示:因为软件在容器内运行,所以需要 systemd,所以这里不能选择 supervisord
【问题讨论】:
-
需要 systemd,因为软件在容器 (Tableau Server) 内运行
-
在 Docker 中,尤其是在 Kubernetes 中,systemd 无法完成其设计要做的 90% 的事情(并且试图在 Docker 中运行 systemctl 是它自己经常造成混淆的原因)。如果 systemd 确实是这个软件的硬性要求,那么在 VM 中运行它可能会更容易。
-
我很确定您需要卷挂载
/var/lib/dbus和/etc/machine-id以及可能的其他路径,但正如大卫所说,如果您的软件与 systemd 密切相关,那么您可能会解决错误问题 -
好吧,听起来很糟糕。什么是正确的解决方案? LinuxContainer?
标签: linux docker kubernetes systemd dbus