如何从docker集装箱“浏览”?

我正在运行一个基于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错误; pybonjour.BonjourError: (-65537, 'unknown')但是我读过这个与avahi守护进程有关的问题。

所以; 如何从容器连接到avahi-daemon?

PS我必须在avahi-daemon.conf填充中closuresdbus以使其可以启动,否则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. (.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.

Avahi需要D-BUS才能与客户沟通。 听起来像你的docker集装箱不启动系统D-BUS。 如果你这样做,那么Avahi应该工作。

你需要D-BUS的Avahi的大部分function(包括avahi浏览),禁用它不会真的帮助。

有一个docker的图像应该从容器内支持avahi。 技巧似乎是从主机挂载/ var / run / dbus到容器中。

请注意,我无法在16.04上运行这个镜像。 主办。

我遇到了同样的问题得到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以包含这些说明之后,您应该使用以下命令创build一个容器:

 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