Docker容器使用問題:Failed to get D-Bus connection: Operation not permitted

剛開始接觸Docker的朋友,可能會遇到這麼一個問題,使用centos7鏡像建立容器後,在裏面使用systemctl啓動服務報錯。針對這個報錯,咱們接下來就分析下!docker


# docker run -itd --name centos7 centos:7centos

# docker attach centos7bash

# yum install vsftpdide

# systemctl start vsftpd學習

Failed to get D-Bus connection: Operation not permittedcentos7

不能啓動服務,什麼狀況?spa

難道容器不能運行服務嘛!!!操作系統


答:設計

Docker的設計理念是在容器裏面不運行後臺服務,容器自己就是宿主機上的一個獨立的主進程,也能夠間接的理解爲就是容器裏運行服務的應用進程。一個容器的生命週期是圍繞這個主進程存在的,因此正確的使用容器方法是將裏面的服務運行在前臺。orm

再說到systemd,這個套件已經成爲主流Linux發行版(好比CentOS七、Ubuntu14+)默認的服務管理,取代了傳統的SystemV風格服務管理。systemd維護系統服務程序,它須要特權去會訪問Linux內核。而容器並非一個完整的操做系統,只有一個文件系統,並且默認啓動只是普通用戶這樣的權限訪問Linux內核,也就是沒有特權,因此天然就用不了!

所以,請遵照容器設計原則,一個容器裏運行一個前臺服務!


我就想這樣運行,難道解決不了嗎?

答:能夠,以特權模式運行容器。


建立容器:

# docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init

進入容器:

# docker exec -it centos7 /bin/bash

這樣可使用systemctl啓動服務了。


但願能幫到您!若是問題,能夠加技術羣一塊兒交流、學習!

 Docker技術交流羣:(516039855)

相關文章
相關標籤/搜索