Run dbus-daemon inside Docker container
Asked Answered
M

3

10

I am trying to create a Docker container with a custom D-Bus bus running inside.

I configured my Dockerfile as follow:

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

After building, the socket is created but it is flagged as "file", not as "socket", and I can not use it as a bus...

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

If I remove this file and run the dbus-daemon command again in a terminal, the socket is successfully created :

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

I am not sure if it is a D-Bus problem or a docker one.

Mccallum answered 20/3, 2017 at 7:46 Comment(1)
Could you find a solution for this?Flasket
M
11

Instead of using the "RUN" command, you should use the "ENTRYPOINT" one to run a startup script.

The Dockerfile should look like that :

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

And run.sh :

#!/bin/bash
dbus-daemon --config-file=/etc/dbus-1/myCustomDbus.conf --print-address
Mccallum answered 24/7, 2017 at 7:32 Comment(2)
where can I find /etc/dbus-1/myCustomDbus.conf file?Hessney
See the manual. You can use --system with no config file path.Cinerarium
C
3

You should use a startup script. The "run" command is executed only when the container is created and then stopped.

Consultative answered 8/7, 2017 at 5:48 Comment(0)
G
1

my 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

then chrome runs with

--use-gl=swiftshader

without errors

Gambeson answered 26/7, 2021 at 21:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.