在Docker容器中运行dbus-daemon

时间:2017-03-20 07:46:53

标签: docker dbus unix-socket

我正在尝试使用内部运行的自定义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

构建之后,套接字已创建,但标记为as "file", not as "socket",我不能将其用作总线......

-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问题还是码头问题。

3 个答案:

答案 0 :(得分:5)

您应该使用“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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我的 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

没有错误