在 Docker 容器内运行 dbus-daemon

问题描述 投票:0回答:4

我正在尝试创建一个 Docker 容器,其中运行自定义 D-Bus 总线。

我的 Dockerfile 配置如下:

FROM ubuntu:16.04
COPY myCustomDbus.conf /etc/dbus-1/
RUN apt-get update && apt-get install -y dbus
RUN dbus-daemon --config-file=/etc/dbus-1/myCustomDbus.conf

构建后,创建了套接字,但它被标记为为“文件”,而不是“套接字”,并且我不能将其用作总线...

-rwxrwxrwx  1 root root    0 Mar 20 07:25 myCustomDbus.sock

如果我删除此文件并在终端中再次运行

dbus-daemon
命令,则套接字已成功创建:

srwxrwxrwx  1 root root    0 Mar 20 07:35 myCustomDbus.sock

我不确定这是 D-Bus 问题还是 docker 问题。

docker dbus unix-socket
4个回答
10
投票

您应该使用“ENTRYPOINT”命令来运行启动脚本,而不是使用“RUN”命令。

Dockerfile 应该如下所示:

FROM ubuntu:14.04
COPY myCustomDbus.conf /etc/dbus-1/
COPY run.sh /etc/init/
RUN apt-get update && apt-get install -y dbus
ENTRYPOINT ["/etc/init/run.sh"]

然后运行.sh:

#!/bin/bash
dbus-daemon --config-file=/etc/dbus-1/myCustomDbus.conf --print-address

3
投票

您应该使用启动脚本。 “run”命令仅在容器创建然后停止时执行。


1
投票

我的run.sh:

if ! pgrep -x "dbus-daemon" > /dev/null
then
    # export DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address | cut -d, -f1)

    # or:
    dbus-daemon --config-file=/usr/share/dbus-1/system.conf
    # and put in Dockerfile:
    # ENV DBUS_SESSION_BUS_ADDRESS="unix:path=/var/run/dbus/system_bus_socket"
else
    echo "dbus-daemon already running"
fi

if ! pgrep -x "/usr/lib/upower/upowerd" > /dev/null
then
    /usr/lib/upower/upowerd &
else
    echo "upowerd already running"
fi

然后 chrome 运行

--use-gl=swiftshader

没有错误


0
投票

我也遇到类似的问题。 dbus-daemon 不会在我的 Docker 容器 (Debian 12) 中自动启动。启动后,我必须使用 Docker 容器内的命令“service dbus restart”手动重新启动服务。但是,该命令仅在 root 用户执行时有效,非特权用户无法访问。 谁能建议我如何配置 dbus-daemon 在我的 Docker 容器中自动启动?

© www.soinside.com 2019 - 2024. All rights reserved.