在Docker容器中运行dbus-daemon

10
我将尝试创建一个包含自定义D-Bus总线的Docker容器。
我的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问题。

你能找到一个解决方案吗? - Vivek Shankar
3个回答

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"]

还有 run.sh :

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

1
我在哪里可以找到/etc/dbus-1/myCustomDbus.conf文件? - alper
请查看手册。您可以使用--system而无需配置文件路径。 - undefined

3
您应该使用启动脚本。只有在容器创建并停止后,“运行”命令才会被执行。

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

没有错误发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接