bart van deenen
bart van deenen

Reputation: 739

How to 'avahi-browse' from a docker container?

I'm running a container based on ubuntu:14.04, and I need to be able to use avahi-browse inside it. However:

(.env)root@8faa2c44e53e:/opt/cluster-manager# avahi-browse -a
Failed to create client object: Daemon not running
(.env)root@8faa2c44e53e:/opt/cluster-manager# service avahi-daemon status
Avahi mDNS/DNS-SD Daemon is running

The actual problem I have is a pybonjour error; pybonjour.BonjourError: (-65537, 'unknown') but I've read that is linked to the problem with the avahi-daemon.

So; how do I connect to the avahi-daemon from the container ?

P.S. I have to switch dbus off in the avahi-daemon.conf fill to make it possible to start it, otherwise avahi-daemon won't start, with a dbus error like this: (.env)root@8faa2c44e53e:/opt/cluster-manager# avahi-daemon Found user 'avahi' (UID 103) and group 'avahi' (GID 107). Successfully dropped root privileges. avahi-daemon 0.6.31 starting up. dbus_bus_get_private(): Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory WARNING: Failed to contact D-Bus daemon. avahi-daemon 0.6.31 exiting.

Upvotes: 8

Views: 11876

Answers (6)

Dan Sheinin
Dan Sheinin

Reputation: 79

I needed to add 2 parameters in my call to docker run command for avahi-browse -at command to run inside the container: --privileged and -v /var/run/dbus:/var/run/dbus

Upvotes: 1

Alon Amsalem
Alon Amsalem

Reputation: 306

Another solution is to use mdns-repeater on the host to forward mDNS packets to the Docker network

mdns-repeater eth1 docker0

Upvotes: 2

leumasino
leumasino

Reputation: 326

As far I can test you can use host's avahi-daemon through Unix socket for mDNS to resolve and /var/run/dbus for avali-browse to work.

E.g.:

docker run -v /var/run/dbus:/var/run/dbus -v /var/run/avahi-daemon/socket:/var/run/avahi-daemon/socket -ti debian:10-slim bash

To test inside container:

apt-get update && apt-get install avahi-utils iputils-ping -y

ping whatever.local

avahi-browse -a

Upvotes: 19

ChrisTimps
ChrisTimps

Reputation: 111

I ran into the same problem getting avahi and dbus to operate correctly on Ubuntu 14.04 (specifically, I was trying to use ROS TurtleBot). I solved it by incorporating a modified version of the instructions in docker-systemd into my Dockerfile:

FROM ubuntu:14.04
RUN apt-get update &&\
    apt-get install -y avahi-utils avahi-daemon libnss-mdns systemd
RUN cd /lib/systemd/system/sysinit.target.wants/;\
  ls | grep -v systemd-tmpfiles-setup | xargs rm -f $1 \
    rm -f /lib/systemd/system/multi-user.target.wants/*;\
  rm -f /etc/systemd/system/*.wants/*;\
  rm -f /lib/systemd/system/local-fs.target.wants/*; \
  rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
  rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
  rm -f /lib/systemd/system/basic.target.wants/*;\
  rm -f /lib/systemd/system/anaconda.target.wants/*; \
  rm -f /lib/systemd/system/plymouth*; \
  rm -f /lib/systemd/system/systemd-update-utmp*
RUN mkdir -p /var/run/dbus
ENV init /lib/systemd/systemd

After modifying your Dockerfile to include these instructions, you should create a container using the following command:

docker run --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro -it <DOCKER_IMAGE> /bin/bash

Finally, once you're inside the container, you must execute the following commands before attempting to use avahi-browse (directly or indirectly):

$ dbus-service --system
$ /etc/init.d/avahi-daemon start

Upvotes: 2

Frederick Nord
Frederick Nord

Reputation: 1304

There is a docker image supposedly supporting avahi from within the container. The trick seems to be to mount /var/run/dbus from the host into the container.

Note that I couldn't make it work to run this image on my 16.04. host.

Upvotes: 1

Trent Lloyd
Trent Lloyd

Reputation: 1892

Avahi requires D-BUS in order to communicate with clients. Sounds like your docker container isn't starting the system D-BUS. If you do that, then Avahi should work.

You need D-BUS for most of Avahi's functionality (including avahi-browse) so disabling it won't really help.

Upvotes: 1

Related Questions