前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安装服务启动报错Failed to get D-Bus connection: Operation not permitted

安装服务启动报错Failed to get D-Bus connection: Operation not permitted

原创
作者头像
张琳兮
修改2021-02-25 10:13:05
13K0
修改2021-02-25 10:13:05
举报
文章被收录于专栏:首富手记首富手记

安装服务启动报错Failed to get D-Bus connection: Operation not permitted

代码语言:txt
复制
作者:张首富
w x:y18163201
时间:2021-02-24

今天别人给我了一个 linux 主机的远程登录方式,让我上去帮他安装个 docker。这么简单的事情不是手到擒来吗。于是开始搞

代码语言:txt
复制
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

准备工作完成,于是开始安装

代码语言:txt
复制
# 在线安装 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

然后当我准备给他说安装好了的时候,启动报错了

代码语言:txt
复制
# 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 吧。

自己找机器实验

代码语言:txt
复制
# 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 里面的系统。

疑问:

回头观察他给我的系统文件系统格式如下

代码语言:txt
复制
# 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 文件系统格式如下:

代码语言:txt
复制
# 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,不知道他是如何实现的。

现在还在询问中,要是有知道的大佬提示给我说下谢谢

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装服务启动报错Failed to get D-Bus connection: Operation not permitted
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档