Docker 컨테이너가 포함된 mDNS

Docker 컨테이너가 포함된 mDNS

실행되는 Docker 컨테이너(HTTP 요청에 단일 포트 3689를 사용하여 mDNS를 통해 게시된 DAAP 서버)를 만들고 forked-daapd해당 포트를 호스트 OS에 올바르게 노출합니다.

sudo docker run -it --rm -v /home/naftuli/Music:/srv/music -p 3689:3689 \
    daapd /sbin/my_init

문제는 서비스의 IP 주소(일부 내부 Docker IP 범위)가 실제로 작동하지 않기 때문에 서비스가 mDNS에 제대로 게시되지 않는다는 것입니다. 를 사용하여 실행할 수 있지만 --net=host기본적으로 네트워크 어댑터를 컨테이너에 넘겨주기 때문에 이는 매우 위험할 수 있습니다.

이 서비스를 게시하고 예정대로 도면 작업을 수행할 수 있는 방법이 있습니까?

답변1

mDNS 서비스 도킹 관련 문제(예:넘쳐등)은 서비스가 이를 광고하기 위해 공용 IP 주소를 알아야 한다는 것입니다. 내가 아는 한, 이 문제를 해결하는 유일한 방법은 컨테이너에 공용 IP를 할당하는 것입니다(이는 약간 까다롭습니다.고정 IP 할당 지원 부족도커에서).

이 기사기술이 어떻게 수행되는지 설명합니다.더반:

  1. Docker 서비스는 으로 시작해야 합니다 . 브리지가 이미 구성되어 있다고 DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"가정합니다 .br0

  2. 컨테이너는 다음으로 끝나야 합니다.--cap-add=NET_ADMIN --net=bridge

  3. 다음 예와 같이 컨테이너 내 pre-up ip addr flush dev eth0에서 /etc/network/interfacesDocker가 할당한 IP 주소를 취소하는 데 사용할 수 있습니다.


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    pre-up ip addr flush dev eth0
    address 192.168.0.249
    netmask 255.255.255.0
    gateway 192.168.0.1
  1. 컨테이너의 항목 스크립트는 로 끝나야 합니다 /etc/init.d/networking start. 또한 항목 스크립트는 /etc/hostsDocker 할당 IP에 대한 참조가 제거되도록 파일을 편집하거나 채워야 합니다.

관련 정보