2015-07-15 17 views
10

Jestem "dokowanie" aplikacji, która wysyła rozgłaszane przez UDP pulsowanie na znanym porcie. Dzieje się tak w przypadku silnika-dokera-1.7.0 na różnych hostach (Fedora, Centos7, SLES 12).Docker docker0 i adresy rozgłoszeniowe kontenera nie są ustawione

Zauważam, że most "docker0" na hoście dokera i "eth0" wewnątrz kontenera ma adres rozgłoszeniowy 0.0.0.0.

Zakładając uprawnienia administratora na hoście, mogę ręcznie ustawić adres emisji na docker0. Podobnie w kontenerze (jeśli kontener działa z uprawnieniami lub z NET_ADMIN, NET_BROADCAST), ale jestem ciekawy, dlaczego adres broadcast nie jest ustawiony domyślnie. Czy istnieje opcja konfiguracji, której brakuje mi w Dockerze, aby to zrobić automatycznie?

Host:

# ifconfig docker0 broadcast 172.17.255.255 up 
# tcpdump -i docker0 -p 5000 

opakowaniu:

# ifconfig eth0 broadcast 172.17.255.255 up 
# echo "Hello world" | socat - UDP-DATAGRAM:172.17.255.255:5000,broadcast 

Broadcast z hosta do pojemnika działa również gdy są ustawione adresy rozgłoszeniowe.

+0

Zobacz także: https://serverfault.com/a/881662 – tne

Odpowiedz

0

jeśli przechodzisz NET_ADMIN do kontenera Docker, w ogóle nie korzystałbym z sieci docker0 dla Twojej aplikacji.

Jeśli dobrze zrozumiałem, co próbujesz zrobić, transmisja UDP w trybie Heartbeating na znanym porcie jest używana przez kontenery Docker należące do różnych hostów, aby znaleźć siebie nawzajem, a nie przez różne kontenery dokowania w tym samym hoście.

bym wtedy zaleca się stosowanie --net=host:

docker run --net=host --cap-add NET_ADMIN ....

Jak to jeśli masz powłoki do pojemnika Döcker, widać, że środowisko sieciowe jest dokładnie taki sam, przyjmującego, który jest prowadzenie kontenerów. Jeśli aplikacja była uruchomiona na tym serwerze wcześniej przy użyciu transmisji UDP, będzie działać dokładnie w ten sam sposób w kontenerze dokowania.

Powiązane problemy