请教一个 docker+systemd 的问题

197 天前
 catamaran

在 docker 镜像中增加了 systemd 的功能,一直没啥问题,最近在 ubuntu 22.04 LTS 中出现了问题, 在 docker 容器中运行 systemctl ,显示Failed to get D-Bus connection: No such file or directory,而在 ubuntu 20.0 4LTS 中就正常。镜像系统是 centos 7.9.

不知道该从哪入手去找原因,哪位有相关的经验提示一下。现在只能想办法把 systemctl 去掉,但是这个成本比较高。

2750 次点击
所在节点    Linux
26 条回复
julyclyde
196 天前
理论上不应该“一直没啥问题”的啊

你看看你容器里 systemd 依赖的 dbus.service 和 dbus.socket 到底启动了没
在前后两个环境里分别看一下
guanzhangzhang
196 天前
你的 n 个进程不会互相之间调用 systemctl 拉起其他服务和做其他服务健康检查吧,是的话写个 shell 或者轮子把 docker.sock 挂载进去伪装成 systemctl 的输出
Maxwellwenjie
196 天前
我好像遇到过 Dbus 报错,不知道是不是同一个问题;是 systemctl restart service 有问题;我先把 restart 关掉了“docker update --restart no <container_id_or_name>”,然后 reboot 两遍(因为第一遍还是会调用 restart );第二遍启动后 Dbus 就不报错了;希望对你有帮助
ruanimal
196 天前
考虑换成 lxc 试试
catamaran
195 天前
最后采用开源的一个 python 脚本替换 systemctl ,https://github.com/gdraheim/docker-systemctl-replacement 。就一个文件,直接把 systemctl 替换掉。跟之前的区别是原来服务是通过 systemd 自启的,现在必须写在 docker 的 entrypoint 中,用 systemctl start service 来启动。长期方案还是不要依赖 systemd ,一个容器只纳管一个服务。
abolast
193 天前
@catamaran 无法理解为什么需要在容器内跑 systemd ,我这边一般是用 systemd 来管理 podman ,podman 管理容器,生产环境也是这样用的,没什么问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1112743

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX