當使用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),獲取更多資訊