You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器执行systemctl报错:无法获取D-Bus连接

Docker容器用不了systemctl?看这篇解决

问题详情

在Docker容器里执行systemctl命令时,弹出错误:

Failed to get D-Bus connection: Operation not permitted

就算开了特权模式启动容器,错误还是一样。试过下面两种启动方式都没用:

  • 第一种:
docker run --name my-container -d -it  --privileged=true dind /usr/sbin/init
  • 第二种:
docker run -it --name my-container --privileged -d --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro my-image

问题根源

Docker容器默认不是以PID 1的进程运行,而systemctl依赖systemd作为PID 1进程来管理服务,还需要完整的cgroup和D-Bus环境支持。就算加了特权模式,容器里没正确初始化systemd环境,照样会报错。

解决办法

  • 用带systemd的基础镜像:选择官方自带systemd的镜像,比如ubuntu:latest或者centos:latest,这类镜像已经配置好systemd运行所需的环境。
  • 正确挂载cgroup并启动systemd:启动容器时,除了挂载/sys/fs/cgroup,还要给容器传环境变量告诉systemd它处于容器环境,试试这条命令:
docker run -d --name my-container --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:rw -e "container=docker" my-image /usr/sbin/init
  • 避免在容器内使用systemctl:Docker本来就是单进程容器设计,要是没必要用systemd管理服务,直接启动单个服务进程就行,比如直接敲nginx而不是systemctl start nginx。

内容的提问来源于stack exchange,提问作者Pravin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:55:21