Docker Swarm Залипший DNS

Я довольно часто использую docker swarm. Мне нравится что он поднимается одной командой, и позволяет быстро раскидать нагрузку по нескольких серверам не прибегая к крутым и сложным решениям типо kubernetes/nomad. Но с ним при нагрузке и частом деплое бывает проблема залипания DNS, когда контейнер уже умер и перезапустился, но его IP остался висеть в DNS как будто он доступен. Ситуация не приятная, но есть решение которое поможет из DNS данный IP прибить. К сожалению работает не всегда, но в 70% случаев это помогает. Для этого необходимо включить дебаг режим у сети докера, и поудалять у него ненужные нам адреса.

  1. Создаём файл /etc/docker/daemon.json
1{
2  "experimental" : true,
3  "network-diagnostic-port": 2000
4}
  1. Получить pid процесса докера
1ps aux | grep dockerd | grep -v grep
  1. Зарелоадить этот процесс, вместо <pid> подставить pid из команды выше
1kill -HUP <pid>
  1. Проверяем что порт диагностики докера открыт
1curl localhost:2000/help
  1. Смотрим какой ID у swarm_network, ID должен быть полный, это важно!
1docker network ls --no-trunc
  1. Получить список всех контейнеров и их ip
1curl "localhost:2000/gettable?nid=<ID_NETWORK>&tname=endpoint_table&unsafe"
  1. Ищем в ответе выше IP который необходимо удалить и подставляем его (смотреть скрин)
1curl "localhost:2000/deleteentry?nid=<ID_NETWORK>&tname=endpoint_table&key=<ID_IP>"
  1. Повторяем пункт 7 пока не удалим все ненужные IP.
  2. Удаляем или переименовываем файл /etc/docker/daemon.json и релоадим докер демона через kill -HUP из шага 3

Тут приложу ссылку на документацию , где я наткнулся про работу с дебаг режимом сети докера. В офф доке информации нет, только на просторах гитхаба