El tráfico UDP desde el exterior al contenedor de docker se elimina después del reinicio del contenedor

siguiente situación: tengo una caja de hardware con Ubuntu 14.04 LTS como host para docker 1.4 Estoy ejecutando una pila ELK en varios contenedores. En resumen, el contenedor logstash está exponiendo solo el puerto 514 para recopilar la entrada de syslog.

en algunas situaciones, después de reiniciar el contenedor, el tráfico de syslog ya no se reenvía al contenedor.

'iptables-nvL' muestra que no hay tráfico que coincida con la regla aplicada a la cadena de reenvío durante el inicio del contenedor. El contador de tráfico de la cadena de ENTRADA es considerablemente más alto que en la cadena de AVANCE.

Noto este comportamiento en todos los contenedores que exponen puertos UDP al mundo, los contenedores con servicios basados en TCP funcionan como se esperaba.

el reinicio de los contenedores y el servicio de Docker no tiene éxito.

Estoy recopilando principalmente registros de tráfico de firewall, por lo que el flujo de tráfico de syslog es bastante constante. Estoy recopilando aproximadamente 1,5 k trampas de Syslog por segundo.

Mi solución alternativa aquí es detener todo el tráfico al host durante aproximadamente 10 segundos (actualmente bloqueando el tráfico en un enrutador ascendente)

Después de detener la exportación de syslog en un solo nodo de firewall durante unos segundos, el tráfico de este firewall específico se reenvía al contenedor como se esperaba. Pero solo de este único.

Creo que este es un problema de iptables. Parece que iptables está almacenando en caché la infracción de reenvío durante unos segundos e ignora cualquier regla nueva aplicada siempre que haya tráfico presente.

No he hecho ninguna configuración adicional en iptables aquí. Todo lo hace Docker. No tengo ufw, conntrackd ni nada instalado.

¿Alguna sugerencia sobre cómo resolver este problema?

las mejores margaritas

Parece que esto está relacionado con conntrack. Se ha marcado como un error de Docker: https://github.com/docker/docker/issues/8795 Hay una solución alternativa enumerada allí; conseguí que uno de mis anfitriones volviera a trabajar con un conntrack -F.

También me he encontrado con este problema, y me ha estado plagando durante meses. Tengo collectd enviando datos a Riemann (en un contenedor Docker) a través de UDP. En el reinicio del contenedor, los datos de collectd no aparecen hasta que reinicio ese proceso. No había hecho la conexión de los 10, pero eso se relaciona con lo que estoy viendo.

¿cuál es su sistema host docker?
Actualmente estoy tratando de reproducir este problema sin docker. Solo con bridge-utils e iptables.