Docker容器Centos不能使用systemctl命令問題


注:本文出自博主 Chloneda個人博客 | 博客園 | Github | Gitee | 知乎

本文源鏈接https://www.cnblogs.com/chloneda/p/bug-dock-os.html

最近使用Docker搭建Centos容器時遇到這樣的問題:Centos系統的不能使用systemctl命令!

具體場景
使用 systemctl 或 service 命令重啟服務時。

systemctl restart snmpd.service 

會報無權限的錯誤:

Failed to get D-Bus connection: Operation not permitted;

這是docker中centos7的bug,官網上也提到了這個問題,並給出了 解決辦法,但有點復雜。我們可以通過以下方法解決!

首先,使用docker構建centos容器加上 privileged 參數,即在docker run命令是要加上 --privileged=true,該參數在docker容器運行時,讓系統擁有真正的root權限。

其次,在啟動容器時,在docker run 命令最后,加上/usr/sbin/init,最終命令為:

docker run -v /tmp/:/tmp --privileged --cap-add SYS_ADMIN -e container=docker -it --name=centos -d --restart=always centos /usr/sbin/init

參數說明:

  • -v /tmp/:/tmp:掛載宿主機的一個目錄,冒號":"前面的目錄是宿主機目錄,后面的目錄是容器內目錄。
  • --privileged: 指定容器是否是特權容器。
  • --cap-add SYS_ADMIN: 添加系統的權限,不然系統很多功能都用不了的。
  • -e container=docker:設置容器的類型。
  • -it: 啟動互動模式。
  • /usr/sbin/init:初始容器里的CENTOS,用於啟動dbus-daemon。

最后,如果想查看Docker更多內容,請查看Docker官網文檔。


免責聲明!

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



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