Ubuntu 16.04 Docker容器启动服务遇“Failed to connect to bus”错误求助
解决Ubuntu 16.04 Docker容器中"Failed to connect to bus: No such file or directory"错误
这个错误我碰到过好多次了,本质是容器里缺少DBus服务的支持——很多系统服务依赖DBus总线来完成进程间通信,但Docker容器默认不会启动这类系统级服务,所以就会抛出这个连接失败的错误。下面给你几个实用的解决办法:
方法一:在容器内手动启动DBus服务
如果你的容器还在运行,先进入容器的交互式终端:
docker exec -it your-container-name /bin/bash
然后执行以下步骤:
- 先确保DBus已安装(如果之前没装的话):
apt-get update && apt-get install -y dbus - 启动DBus服务:
service dbus start - 设置DBus环境变量,让后续服务能找到总线地址:
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/dbus/system_bus_socket
做完这些再尝试启动你的服务,应该就能正常连接DBus总线了。
方法二:运行容器时挂载主机的DBus套接字
如果不想每次进入容器都手动启动服务,可以在启动容器的时候直接挂载主机的DBus套接字,让容器共享主机的DBus服务:
docker run -d -v /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket your-image-name
这样容器内的进程就能直接通过挂载的套接字连接到主机的DBus总线,省去了手动启动服务的步骤。
额外提示
Ubuntu 16.04默认用的是Upstart而不是Systemd,如果你要启动的服务依赖Systemd,那可能还需要调整容器的启动方式(比如用--privileged参数或者配置Systemd在容器内运行),不过大部分情况下解决DBus的问题就能搞定你遇到的错误了。
内容的提问来源于stack exchange,提问作者Ashwani
相关产品推荐
相关产品推荐

