安裝服務啟動報錯Failed to get D-Bus connection: Operation not permitted


安裝服務啟動報錯Failed to get D-Bus connection: Operation not permitted

作者:張首富
w x:y18163201
時間:2021-02-24

今天別人給我了一個 linux 主機的遠程登錄方式,讓我上去幫他安裝個 docker。這么簡單的事情不是手到擒來嗎。於是開始搞

1,查看下系統版本
# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
2, 查看下磁盤分區情況
# df -Th
Filesystem                                                                                            Type   Size  Used Avail Use% Mounted on
/dev/mapper/docker-253:2-12888033817-9f12171102a5151e4f0a6b77bb496f6446352e34b3b1ca35888b4eeb81ebd916 xfs     10G  1.1G  9.0G  11% /
tmpfs                                                                                                 tmpfs   64M     0   64M   0% /dev
tmpfs                                                                                                 tmpfs   63G     0   63G   0% /sys/fs/cgroup
/dev/mapper/centos-home                                                                               xfs    3.6T  355G  3.3T  10% /home
/dev/mapper/centos-root                                                                               xfs     50G   36G   15G  71% /etc/yum.repos.d
shm                                                                                                   tmpfs   64M     0   64M   0% /dev/shm

准備工作完成,於是開始安裝

# 在線安裝 docker 使用的是 docker 最新版本 19.03
  curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  # 創建配置文件
  mkdir -p /home/dockerd
  mkdir -p /etc/docker/
cat >> /etc/docker/daemon.json <<-'EOF'
{
  "graph": "/home/dockerd",
  "data-root": "/home/dockerd",
  "storage-driver": "overlay2",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "live-restore": true,
  "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],
  "log-driver":"json-file",
  "log-opts":{ "max-size" :"100m","max-file":"10"}
}
EOF

然后當我准備給他說安裝好了的時候,啟動報錯了

# systemctl start docker
Failed to get D-Bus connection: Operation not permitted

然后就懵逼了。趕緊 google

通過查閱資料:

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

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

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

發現都是在 docker 里面才會出現這個問題,是因為不是特權模式,看到這我就有點明白了,這個人怕是給我一個 docker 容器讓我給他安裝 docker 吧。

自己找機器實驗

# docker exec -it -p 8888:22 --name test --rm centos:centos7.6.1810 bash
# yum -y install openssh-server
# ssh-keygen -A
# /usr/sbin/sshd
# passwd

然后在開個窗口去連接 8888 端口,安裝服務啟動的時候果不其然的報錯和上圖一樣。我就推測他給我的是一個docker 啟動的 centos。

但是想在容器中使用systemctl來管理包難道就沒辦法了嗎?那肯定不是,我們只需要使用特權模式啟動即可--privileged=true ,經過確定他給我的確實是一個在 docker 里面的系統。

疑問:

回頭觀察他給我的系統文件系統格式如下

# df -Th
Filesystem                                                                                            Type   Size  Used Avail Use% Mounted on
/dev/mapper/docker-253:2...6 xfs     10G  1.1G  9.0G  11% /
tmpfs                                                                                                 tmpfs   64M     0   64M   0% /dev
tmpfs                                                                                                 tmpfs   63G     0   63G   0% /sys/fs/cgroup
/dev/mapper/centos-home                                                                               xfs    3.6T  355G  3.3T  10% /home
/dev/mapper/centos-root                                                                               xfs     50G   36G   15G  71% /etc/yum.repos.d
shm                                                                                                   tmpfs   64M     0   64M   0% /dev/shm

但是我們啟動的 docker 文件系統格式如下:

# df -Th
Filesystem     Type     Size  Used Avail Use% Mounted on
overlay        overlay 1008G  143G  815G  15% /
tmpfs          tmpfs     64M     0   64M   0% /dev
tmpfs          tmpfs    3.9G     0  3.9G   0% /sys/fs/cgroup
shm            tmpfs     64M     0   64M   0% /dev/shm
/dev/sdb       ext4    1008G  143G  815G  15% /etc/hosts
tmpfs          tmpfs    3.9G     0  3.9G   0% /proc/acpi
tmpfs          tmpfs    3.9G     0  3.9G   0% /proc/scsi
tmpfs          tmpfs    3.9G     0  3.9G   0% /sys/firmware

會發現文件的跟系統格式不一樣。他的格式為 xfs,但我們的卻是overlay,不知道他是如何實現的。

現在還在詢問中,要是有知道的大佬提示給我說下謝謝


免責聲明!

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



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