连接到 Docker 中的相机

要在没有 mDNS 发现的情况下连接到 Docker 中的相机,可以通过 IP 地址或主机名连接,将主机网络开放给容器,或在 Cameras.yml 文件中列出相机的 IP。

备注

在继续之前,请确保您已在主机上配置了 网络配置。

备注

这些说明与计算后端无关。有关 OpenCL 和 CUDA 后端选项以及应为您的主机选择哪一个,请参见 在 Docker 中安装 Zivid。

Docker 默认使用 bridge 网络驱动,该驱动不允许多播流量。这意味着多播 DNS(mDNS)网络发现功能不可用,在未进行进一步设置之前,只能发现 IP 为默认 IP 172.28.60.5 的相机。有三种方法可以解决这个问题。

Connect by IP address or hostname

如果您知道相机的 IP 地址或主机名,可以直接连接到它,而不依赖 mDNS 发现。按照 捕获教程 中所述,将 CameraAddress 传递给 connectCamera。当您要连接到已知地址的特定相机时,这是最简单的方式。

Host network

一个简单的解决方案是将主机网络开放给 Docker 容器。这可以通过在运行 Docker 容器时启用 --network=host 来实现。

Intel
sudo docker run --interactive --tty --device=/dev/dri --network=host <image>
NVIDIA
sudo docker run --interactive --tty --gpus=all --network=host <image>
Jetson
sudo docker run --interactive --tty --runtime=nvidia --gpus=all --network=host <image>

其中 <image> 是您从中启动容器的 Docker 镜像。请注意,这会将所有主机网络接口公开给容器。

备注

这适用于原生 Linux 系统,因为在该系统上主机网络可以直接访问相机。在 Windows 上,Docker Desktop 在 WSL 虚拟机中运行容器。在这种情况下,--network=host 开放的是该虚拟机的网络,而不是 Windows 主机网络,因此 mDNS 发现无法找到相机。相机仍可通过 IP 地址访问,因此在 Windows 上应改为通过 IP 地址或主机名连接。

Cameras.yml

Zivid SDK 可以通过使用 Cameras.yml 文件来搜索特定的 IP 地址,而不是使用 mDNS。请查看 使用 Cameras.yml 限制可发现的相机 以了解更多相关工作原理。将以下内容添加到您的 Dockerfile 中,以发现使用非默认 IP 的相机。

ENV ZIVID_CONFIG=/root/.config/Zivid/API/Cameras.yml
RUN mkdir --p $(dirname $ZIVID_CONFIG)
RUN echo "__version__: 1"                   >> $ZIVID_CONFIG
RUN echo "Cameras:"                         >> $ZIVID_CONFIG
RUN echo "    NetworkCameras:"              >> $ZIVID_CONFIG
RUN echo "        - NetworkCamera:"         >> $ZIVID_CONFIG
RUN echo "            Host: 172.28.60.5"    >> $ZIVID_CONFIG
RUN echo "        - NetworkCamera:"         >> $ZIVID_CONFIG
RUN echo "            Host: 172.28.60.6"    >> $ZIVID_CONFIG
RUN echo "        - NetworkCamera:"         >> $ZIVID_CONFIG
RUN echo "            Host: 172.28.60.7"    >> $ZIVID_CONFIG

更改 Host 以发现具有您的特定 IP 地址的相机,或添加另一个 NetworkCamera 。再次构建 Docker 镜像以使更改生效。

备注

These workarounds restore mDNS discovery in the container. If you know the camera's address, your application can instead connect to it directly with connect by IP address or hostname, which does not rely on mDNS and needs no Cameras.yml file.

请通过运行以下命令验证您能够在 Docker 容器中发现所有已连接的相机

ZividListCameras