我有一个基于CentOS/SystemD的Docker conterter。我用
运行容器 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
如果我现在输入命令systemctl
,我会获取错误消息
无法获得D-Bus连接:操作不允许
如何在POD中使用SystemD/SystemCTL?
提示:由于容器内运行的软件而需要Systemd,因此Substisord不是一个选择
这是一个可悲的观察结果,即丹尼尔·沃尔什(Daniel Walsh(Redhat((的旧提案仍在浮动 - 其中包括一个提示,可以通过基本上通过"特权容器"来获得"特权容器"以获得某种系统。与容器外的守护程序交谈。
掉下来。把它忘了吧。除非违反其基本设计,否则您将无法在真正的集群中得到。
,在大多数情况下,在仔细观察时,容器中对系统的需求不是很严格。容器有很多服务经理或Init-daemon隐藏。例如,您可以尝试使用Docker-Systemctl-Replacement脚本。
启动systemd的命令必须在容器中的脚本中。我使用/usr/sbin/init
或/usr/lib/systemd/systemd --systemd --unit=basic.target
。此外,您需要使用TMPFS进行/运行以存储运行时信息。脚本脚本并不容易,而Tableau就是一个很好的例子。
另外,我建议不要不惜一切代价使用 - 因为这是一种安全风险,而且您可能会意外地更改或降低主机,并在容器内部进行更改。