Failed to get D-Bus connection: Operation not permitted , docker安裝centos7之坑

當使用docker安裝centos:7鏡像或centos:latest後,若是執行systemctl時,會出現如下問題git

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

這是docker中centos7的bug,官網上也提到了這個問題,Docker的官方CentOS鏡像中沒有提供systemd服務,並給出了 解決辦法,雖然複雜了一點,仍是能夠處理的。github

一、建立systemd的base imagedocker

新建一個文件 Dockerfile,這是構建docker鏡像時默認讀取的文件名稱,也能夠使用其它文件名,而後在構建時使用 -f 指定文件名便可centos

vi Dockerfile

輸入如下內容bash

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 .

二、基於該鏡像建立http服務的鏡像ssh

從新編輯Dockerfile文件socket

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鏡像(注意:記得命令最後要加個空格和點,不然會報錯)ui

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

三、使用新的鏡像來建立centos7容器

記得要加上 --privileged,官方給的示例沒有這個參數,執行時會報錯,加上以後就不會了

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

四、進入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

這個問題還暫時找不到解決辦法,後面繼續研究

 

歡迎關注本人的微信公衆號「大數據與人工智能Lab」(BigdataAILab),獲取更多資訊

相關文章
相關標籤/搜索