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


剛開始接觸Docker的朋友,可能會遇到這么一個問題,使用centos7鏡像創建容器后,在里面使用systemctl啟動服務報錯。針對這個報錯,我們接下來就分析下!

 

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

# docker attach centos7

# yum install vsftpd

# systemctl start vsftpd

Failed to get D-Bus connection: Operation not permitted

不能啟動服務,什么情況?

難道容器不能運行服務嘛!!!

 

答:

Docker的設計理念是在容器里面不運行后台服務,容器本身就是宿主機上的一個獨立的主進程,也可以間接的理解為就是容器里運行服務的應用進程。一個容器的生命周期是圍繞這個主進程存在的,所以正確的使用容器方法是將里面的服務運行在前台。

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

因此,請遵守容器設計原則,一個容器里運行一個前台服務!

 

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

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

 

創建容器:

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

進入容器:

# docker exec -it centos7 /bin/bash

這樣可以使用systemctl啟動服務了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM