резолвятся не все имена host-файла

Alexey Galygin mif на me.com
Чт Сен 10 11:48:22 UTC 2020


доброго дня

хотелось бы всё таки разобраться с вопросом резолвинга имён

у нас есть докер-контейнер с nginx 1.18.0 с Docker Hub
в него мы подкладываем в /etc/hosts файл свои несколько записей (условно):

10.0.3.4 docker_srv_a
10.0.3.5 docker_srv_b
10.0.3.6 docker_srv_c

никакой разницы нет в дальнейшем использовании docker_srv_[a,b,c] в nginx.conf, при этом, srv_a и srv_b работают, а srv_c нет

проверяли всё до знаков пунктуации — нет разницы в описании, но имя docker_srv_c nginx не видит

пересборка, дублирование в родительской машинке в /etc/hosts, перезапуски nginx — ничего не помогает
сам контейнер видит записи (через ping), nginx не видит одну из них — docker_srv_c

все записи, но в особенности последняя резолвится (ping) в контейнере (docker exec -it nginx ping docker_srv_c), но последняя не резолвится в nginx

в error log ошибка:

2020/09/10 13:24:58 [error] 22#22: *40 no resolver defined to resolve docker_srv_c, client: …, server: …, request: "GET /srv_c/api HTTP/1.1", host: "…"

перевод строки ещё один на всякий случай добавлял в конец /etc/hosts — не помогло

далее, поверх этих имён я просто повесил upstream'ы и, все три записи стали видны!
убираю апстримы, пишу напрямую в proxy_pass http://docker_srv_c — не может разрешить имя

всё же какой-то глюк тут явно есть…
что за внутренняя процедура в nginx relover по умолчанию и почему она не полностью следует hosts-файлу?

почему резолвится только часть имён? да и что за чудеса, чем upstream так помогает резолвингу?


Подробная информация о списке рассылки nginx-ru