Failed to get D-Bus connection: Operation not permitted , docker安装centos7之坑
博客专区 > 雪饼 的博客 > 博客详情
Failed to get D-Bus connection: Operation not permitted , docker安装centos7之坑
雪饼 发表于4个月前
Failed to get D-Bus connection: Operation not permitted , docker安装centos7之坑
  • 发表于 4个月前
  • 阅读 141
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

当使用docker安装centos:7镜像或centos:latest后,如果执行systemctl时,会出现以下问题

[root@68903c5fbdeb /]# systemctl stop firewalld.service
Failed to get D-Bus connection: Operation not permitted

这是docker中centos7的bug,官网上也提到了这个问题,Docker的官方CentOS镜像中没有提供systemd服务,并给出了 解决办法,虽然复杂了一点,还是可以处理的。

1、创建systemd的base image

新建一个文件 Dockerfile,这是构建docker镜像时默认读取的文件名称,也可以使用其它文件名,然后在构建时使用 -f 指定文件名即可

vi Dockerfile

输入以下内容

FROM centos:latest
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]

执行创建镜像命令(注意:记得命令最后要加个空格和点,否则会报错)

docker build --rm -t centos:c7-systemd .

2、基于该镜像创建http服务的镜像

重新编辑Dockerfile文件

vi Dockerfile

删除原来的内容,输入以下内容

FROM centos:c7-systemd
RUN yum -y install httpd; yum clean all; systemctl enable httpd.service
EXPOSE 80
CMD ["/usr/sbin/init"]

构建docker镜像(注意:记得命令最后要加个空格和点,否则会报错)

docker build --rm -t centos:c7-systemd-httpd .

3、使用新的镜像来创建centos7容器

记得要加上 --privileged,官方给的示例没有这个参数,执行时会报错,加上之后就不会了

docker run --privileged -it --name mycentos -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 centos:c7-systemd-httpd

4、进入docker容器执行systemctl

docker exec -it mycentos bin/bash

执行

systemctl start sshd.service

虽然现在没有提示 Failed to get D-Bus connection: Operation not permitted 问题,但却提示

[root@21481fb2cefc /]# systemctl start sshd.service
Failed to get D-Bus connection: No such file or directory

而查了systemctl的服务路径

ls /usr/lib/systemd/system | grep sshd.service

是存在 sshd.service 服务的,但执行systemctl却说是找不到文件,很奇怪

执行 systemctl enable sshd.service 也不行

[root@21481fb2cefc /]# systemctl enable sshd.service
Failed to get D-Bus connection: No such file or directory

这个问题还暂时找不到解决办法,后面继续研究

标签: CentOS Docker
共有 人打赏支持
雪饼
粉丝 53
博文 11
码字总数 24948
×
雪饼
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: