Docker внутренняя медленная DNS для разрешения внутренних имен служб - PullRequest
0 голосов
/ 17 апреля 2020

Отправка этого опыта (вопроса) на случай, если другие столкнутся с такой же ситуацией ...

Работа над мультиконтейнером Docker -Создание развертывания с использованием нескольких частных REST-API (в python / Flask). Система была развернута на хостах Ubuntu VM и работала без проблем в течение нескольких недель. (Это была внутренняя демонстрационная установка)

Основной GUI внезапно стал почти не отвечать. Каждый вызов API занимал так много времени, что вызывал случайные тайм-ауты, что делало его непригодным для использования. Расследование показало, что вызовы API выполнялись до 10 секунд, когда один контейнер пытался вызвать API в другом.

Виновным был файл /etc/resolv.conf на хосте. DevOps изменил все хосты, добавив строку поиска в resolv.conf, которая была перехвачена контейнерами Docker при перезапуске. Это приводило к тому, что каждый внутренний вызов API пытался разрешить имя службы, выполняя поиск там, где оно не будет найдено, рассчитывая время ожидания, а затем пытаясь найти следующее местоположение.

Это вызвало попытку подключения к http://my-service: 12345 / api / v1 / health для попытки my-service.local.company.com (timeout) my-service.company.com ( timeout) и, наконец, просто my-service (API success).

Чтобы исправить эту проблему, я создал локальную чистую версию файла resolv.conf следующим образом:

nameserver 127.0.0.11
options ndots:0

I затем Созданный том в записях контейнера docker -создать для монтирования ./resolv.conf:/etc/resolv.conf. Это переопределило файл resol.conf, унаследованный от хоста, и теперь все внутренние имена служб разрешаются быстро, без таймаутов и задержек.

my-service:
  image: foo:latest
  container_name: "priv_api" 
  volumes:
    - ./resolv.conf:/etc/resolv.conf
  networks:
    - nodeapp-network

Забавной частью этой ошибки было обнаружение того, что изменения были внесены в хост машина 2 недели go и не влияла на контейнеры docker, пока они не были перезапущены.

...