Connecting to camera(s) in Docker
mDNS 검색 없이 Docker에서 카메라에 연결하려면 IP 주소 또는 호스트 이름으로 직접 연결하거나, 호스트 네트워크를 컨테이너에 노출하거나, Cameras.yml 파일에 카메라의 IP를 나열하세요.
참고
계속하기 전에 호스트 컴퓨터에서 Network Configuration 를 구성했는지 확인하세요.
참고
이 지침은 컴퓨팅 백엔드와 관계없이 동일하게 적용됩니다. OpenCL 및 CUDA 백엔드 옵션과 호스트에 어떤 옵션을 사용해야 하는지는 Install Zivid in Docker 를 참조하세요.
Docker는 기본적으로 bridge 네트워크 드라이버를 사용하는데, 이 드라이버는 멀티캐스트 트래픽을 허용하지 않습니다. 즉, 멀티캐스트 DNS(mDNS) 네트워크 검색을 사용할 수 없으며, 추가 구성 없이 기본 IP 주소 172.28.60.5 인 카메라만 검색할 수 있습니다. 이 문제를 해결하는 방법은 세 가지가 있습니다.
IP 주소 또는 호스트 이름으로 연결
카메라의 IP 주소 또는 호스트 이름을 알고 있다면, mDNS 검색에 의존하지 않고 직접 연결할 수 있습니다. Capture Tutorial 에 설명된 대로 CameraAddress 를 connectCamera 에 전달하세요. 이는 알려진 주소의 특정 카메라에 연결할 때 가장 간단한 방법입니다.
호스트 네트워크
간단한 해결책은 호스트 네트워크를 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 파일을 사용하여 mDNS 대신 특정 IP 주소를 검색할 수 있습니다. 작동 방식에 대한 자세한 내용은 Cameras.yml로 검색 가능한 카메라 제한 을 참조하세요. 기본 IP가 아닌 카메라를 검색하려면 Dockerfile에 다음을 추가하세요.
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 이미지를 다시 빌드하세요.
참고
이러한 해결 방법은 컨테이너에서 mDNS 검색 기능을 복원합니다. 카메라의 주소를 알고 있다면, 애플리케이션이 mDNS에 의존하지 않고 Cameras.yml 파일도 필요 없는 IP 주소 또는 호스트 이름으로 연결 방식을 사용해 직접 연결할 수 있습니다.
다음을 실행하여 Docker 컨테이너에서 연결된 모든 카메라를 검색할 수 있는지 확인합니다.
ZividListCameras