Трафик UDP извне в контейнер docker отбрасывается после перезапуска контейнера

следующая ситуация: у меня есть аппаратный блок с Ubuntu 14.04LTS в качестве хоста для docker 1.4, я запускаю стек ELK в нескольких контейнерах. В настоящее время контейнер logstash предоставляет доступ только к порту 514 для сбора входных данных системного журнала.

в некоторых ситуациях после перезапуска контейнера трафик системного журнала больше не перенаправляется в контейнер.

'iptables -nvL' показывает, что нет трафика, соответствующего правилу, применяемому к цепочке пересылки во время запуска контейнера. Счетчик трафика входной цепочки значительно выше, чем в ПРЯМОЙ цепочке.

Я замечаю такое поведение во всех контейнерах, которые предоставляют доступ к портам UDP миру, контейнеры со службами на основе TCP работают должным образом.

перезапуск контейнеров и службы docker не увенчался успехом.

Я в основном собираю журналы трафика брандмауэра, поэтому поток трафика системного журнала довольно постоянен. Я собираю около 1,5 тыс. ловушек системного журнала в секунду.

Мой обходной путь здесь заключается в том, чтобы остановить весь трафик на хост примерно на 10 секунд (в настоящее время путем отключения трафика на вышестоящем маршрутизаторе).

После остановки экспорта системного журнала на одном узле брандмауэра на несколько секунд трафик с этого конкретного брандмауэра перенаправляется в контейнер, как и ожидалось. Но только от этого единственного.

Я думаю, что это проблема iptables. Похоже, что iptables кэширует нарушение пересылки в течение нескольких секунд и игнорирует любые новые применяемые правила до тех пор, пока присутствует трафик.

Я не делал здесь никакой дополнительной настройки iptables. Все делается докером. У меня нет установленных ufw, conntrackd или чего-либо еще.

Кто-нибудь подсказывает, как решить эту проблему?

наилучшие пожелания Андреасу

Похоже, это связано с conntrack. Это было помечено как ошибка Docker: https://github.com/docker/docker/issues/8795 Там указан обходной путь; Я успешно заставил одного из моих хостов снова работать с conntrack -F.

Я тоже столкнулся с этой проблемой, и она мучает меня уже несколько месяцев. У меня есть collectd, отправляющий данные в Riemann (в контейнере Docker) через UDP. При перезапуске контейнера данные collectd не отображаются до тех пор, пока я не перезапущу этот процесс. Я не установил связь с 10s, но это связано с тем, что я вижу.

какова ваша хост-система docker?
В настоящее время я пытаюсь воспроизвести эту проблему без docker. Только с помощью bridge-utils и iptables.