Pregunta docker docker0 y direcciones de transmisión de contenedor no configuradas


Estoy "dockerizing" una aplicación que hace UDP transmitir heartbeating en un puerto conocido. Esto es con docker-engine-1.7.0 en una variedad de hosts (Fedora, Centos7, SLES 12).

Observé que el puente 'docker0' en el host docker y 'eth0' dentro del contenedor tienen una dirección de difusión de 0.0.0.0.

Asumiendo privilegios de administrador en el host, puedo configurar manualmente la dirección de difusión en docker0. Del mismo modo, en el contenedor (si el contenedor se está ejecutando con privilegios o con NET_ADMIN, NET_BROADCAST), pero tengo curiosidad por saber por qué la dirección de difusión no está configurada de manera predeterminada. ¿Existe una opción de configuración que me falta para Docker para hacer esto automáticamente?

Anfitrión:

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

Envase:

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

La transmisión desde el host al contenedor también funciona una vez que se establecen las direcciones de difusión.


10
2017-07-15 15:28


origen


Respuestas:


si estás pasando NET_ADMIN al contenedor Docker, no usaría el docker0 red en absoluto para su aplicación.

Si entendí correctamente lo que está intentando hacer, el latido de la transmisión UDP en un puerto conocido es utilizado por contenedores Docker que pertenecen a diferentes hosts para encontrarse entre sí, y no por diferentes contenedores docker en el mismo host.

Yo recomendaría usar --net=host:

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

De esta manera, si obtienes un shell en el contenedor del docker, verás que el entorno de red es exactamente el mismo del host que ejecuta los contenedores. Si su aplicación se estaba ejecutando en ese servidor anteriormente utilizando transmisión UDP, funcionará exactamente de la misma manera en el contenedor acoplable.


0
2018-02-05 13:59