6

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 に接続するにはどうすればよいですか?

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

4

5 に答える 5

2

Ubuntu 14.04でavahiとdbusを正しく動作させるのと同じ問題に遭遇しました(具体的には、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

最後に、コンテナ内に入ったら、avahi-browse を (直接的または間接的に) 使用する前に、次のコマンドを実行する必要があります。

$ dbus-service --system
$ /etc/init.d/avahi-daemon start
于 2016-12-16T16:59:42.650 に答える
1

Avahi は、クライアントと通信するために D-BUS を必要とします。docker コンテナがシステム D-BUS を起動していないようです。そうすれば、Avahi が機能するはずです。

Avahi のほとんどの機能 (avahi-browse を含む) には D-BUS が必要なので、無効にしてもあまり役に立ちません。

于 2015-07-03T00:30:11.167 に答える
1

コンテナー内から avahi をサポートしていると思われるdocker イメージがあります。トリックは、ホストからコンテナーに /var/run/dbus をマウントすることのようです。

私の 16.04 でこのイメージを実行することができなかったことに注意してください。ホスト。

于 2016-06-15T12:50:09.267 に答える