Не удается выполнить поиск DNS на "внешних" DNS-серверах?
Последние несколько недель я пытаюсь исправить ошибку в стеке Docker, но безрезультатно.
Это рассматриваемый файл компоновки (урезанный до соответствующего материала):
version: '3.7'
services:
php:
...
dns:
- 1.1.1.1
- 1.0.0.1
networks:
default:
internal: true
driver: overlay
Он разворачивается очень хорошо, пока мне не придется делать все, что требует "внешнего" DNS-запроса.
Например. в моем контейнере я запускаю вручную curl https://www.google.com
,
Это приводит к следующей ошибке
curl: (6) Не удалось разрешить хост: google.com
Это содержание моего /etc/resolv.conf
внутри контейнера:
search finlaydag33k.nl
nameserver 127.0.0.11
options ndots:0
Бег docker inspect -f '{{.HostConfig.DNS}}' container-id
приводит к следующему выводу:
[1.1.1.1 1.0.0.1]
У меня вопрос, что я делаю не так и как я могу это исправить? Он может обращаться к сервисам в пределах одного и того же стека по имени DNS, но это не касается доменов, которым требуется внешний DNS (например, 1.1.1.1
или же 8.8.8.8
). Мой брандмауэр не блокирует ничего.
2 ответа
Это немного "до" момент.
Очевидно (хотя я не мог найти это в документах), контейнер только подключен к default
сеть, которая является overlay
сеть.
Это означает, что нужно явно добавить bridge
сеть (уже должен присутствовать в вашем рое) к этому контейнеру (а также явно подключить его к default
сеть, чтобы он мог общаться с другими контейнерами в стеке).
Это не было задокументировано, поэтому я предположил, что он уже смог добраться до внешней стороны.
После добавления вручную default
а также bridge
сети в контейнер, все работает как положено.
version: '3.7'
services:
php:
...
networks:
- default
- bridge
dns:
- 1.1.1.1
- 1.0.0.1
networks:
default:
internal: true
driver: overlay
bridge:
external: true
Попробуйте добавить сервер пересылки DNS в /etc/resolv.conf, добавив
server=8.8.8.8
server=1.1.1.1
Посмотрите, разрешает ли curl разрешение Google после того, как вы добавили это