【问题标题】:Run dbus-daemon inside Docker container在 Docker 容器中运行 dbus-daemon
【发布时间】:2017-08-11 09:59:04
【问题描述】:

我正在尝试创建一个内部运行自定义 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 问题还是 docker 问题。

【问题讨论】:

  • 你能找到解决办法吗?

标签: docker dbus unix-socket


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      没有错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 2022-10-04
        • 1970-01-01
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多