求助,centos7镜像创建的容器里面安装服务后,无法使用命令启动服务


[root@1a7e1970060a /]# systemctl start sshd

Failed to get D-Bus connection: Operation not permitted

求助,centos7镜像创建的容器里面安装服务后,无法使用命令启动服务
已邀请:

adolphlwq - https://blog.adolphlwq.xyz

赞同来自: styshoo


首先恭喜你遇到了centos:7镜像的大坑!
你的问题在stackoverflow上类似的讨论


Currently, systemd in CentOS 7 has been removed and replaced with a fakesystemd package for dependency resolution. This is due to systemd requiring the CAP_SYS_ADMIN capability, as well as being able to read the host's cgroups. If you wish to replace the fakesystemd package and use systemd normally, please follow the steps below.
上文是github centos官方镜像repo README.md的解释,大意是说原来的systemd会需要CAP_SYS_ADMIN,我们不想这样,就换成了fakesystemd,所以你会遇到上面奇葩的问题.当然官方repo也给出了解决方案不过比较复杂.

你可以使用/usr/sbin/sshd &来启动ssh服务.或者换成centos6系列的镜像.总之centos7镜像太坑.

这个问题我也遇到了.您可以参考下sequenceiq的dockerfile设计,这个是在centos6.5构建的镜像.

PS:这个问题困扰了我将近2天在弄明白.真是浪费时间.希望能帮助到您.

bnuhero - 读书喝茶踢球写程序

赞同来自: CullenX


升级到最新的 CentOS 7.2 镜像能解决这个问题:Fixing CentOS 7 systemd conflicts with docker

Persi

赞同来自:


centos7systemctlbug.png
centos7.2的镜像同样也有这个问题

yingz - 80后it男。。。

赞同来自:


将近两年前的问题了。
我最近也遇到这个问题。其实在docker hub的centos镜像的说明页面上有一节“Systemd integration”,已经介绍了如何在标准镜像的基础上启用systemd支持。按它给的Dockerfile再构建一个镜像即可,假设tag为centos:systemd。
启动的命令需要挂载cgroup的fs,并用init来做entrypoint。
docker run -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name centos centos:systemd /usr/sbin/init


如果需要执行其它命令,可以执行exec进入容器
docker exec -ti centos  bash

要回复问题请先登录注册