如何从码头工人容器'avahi-browse'?

时间:2015-06-04 14:41:37

标签: docker mdns avahi

我正在运行基于ubuntu:14.04的容器,我需要能够在其中使用avahi-browse。但是:

(.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

我遇到的实际问题是pybonjour错误; pybonjour.BonjourError: (-65537, 'unknown')但我读过这与avahi-daemon的问题有关。

因此;如何从容器连接到avahi-daemon?

P.S。我必须在avahi-daemon.conf填充中关闭dbus才能启动它,否则avahi-daemon将无法启动,dbus错误如下: (.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.

5 个答案:

答案 0 :(得分:6)

据我所知,您可以通过Unix套接字使用主机的avahi守护程序来解析mDNS,使用/ var / run / dbus来使avali浏览正常工作。

例如:

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

要在容器内测试:

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

ping whatever.local

avahi-browse -a

答案 1 :(得分:1)

我遇到了同样的问题,让avahi和dbus在Ubuntu 14.04上正常运行(具体来说,我试图使用ROS TurtleBot)。我通过将docker-systemd中的指令的修改版本合并到我的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

修改Dockerfile以包含这些说明后,应使用以下命令创建容器:

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

最后,一旦你进入容器,你必须在尝试使用av​​ahi-browse(直接或间接)之前执行以下命令:

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

答案 2 :(得分:0)

Avahi需要D-BUS才能与客户进行通信。听起来你的docker容器没有启动系统D-BUS。如果你这样做,那么Avahi应该工作。

你需要D-BUS来实现Avahi的大多数功能(包括avahi-browse),因此禁用它不会真正有用。

答案 3 :(得分:0)

容器内有一个docker image据称支持avahi。诀窍似乎是将/ var / run / dbus从主机挂载到容器中。

请注意,我无法在16.04上运行此图像。主机。

答案 4 :(得分:0)

另一种解决方案是在主机上使用mdns-repeater将mDNS数据包转发到Docker网络

mdns-repeater eth1 docker0

相关问题