新手问个问题,希望大家不要嫌弃,如何在容器内使用systemctl?


每当我使用systemctl时都会得到这个错误:
Failed to get D-Bus connection: No connection to service manager.
所以想问一下如何才能才容器内使用sysytemctl,如果不能的话, 那要怎样开启服务的守护进程呢?
先谢谢大家
已邀请:

tuxknight

赞同来自:


不知道你的具体场景是什么样,为什么要运行systemctl来启动container中的服务。那么假设你是希望在container中有一套服务管理程序来对container中的进程进行管理,这种需求当然是在一个container中运行多个进程的场景下才会有。

由于container和host是在不同的pid namespace ,container中也会存在一个PID=1的进程,通常由这个进程来实现进程的管理、资源的回收等。通常的解决方案有supervisord
S6

还有一个可以推荐的base image
如果你只是想一个container中运行一个进程,只需要精心的准备一个entrypoint脚本就好了。具体的例子可以去看看官方做的一个docker image,这里一句两句很难说得清了。

徐新坤 - 京东商城-TIG-JDOS团队

赞同来自:

Failed to get D-Bus connection: No connection to service manager.


这个的原因是因为dbus-daemon没能启动。其实systemctl并不是不可以使用。将你的CMD或者entrypoint设置为/usr/sbin/init即可。会自动将dbus等服务启动起来。然后就可以使用systemctl了。命令如下:
docker run --privileged  -ti -e "container=docker"  -v /sys/fs/cgroup:/sys/fs/cgroup  centos:centos7  /usr/sbin/init


请参考https://github.com/docker/docker/issues/7459

要回复问题请先登录注册