注:本文出自博主 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官網文檔。