Контейнеры не могут разрешить DNS в CentOS - PullRequest
1 голос
/ 02 мая 2020

Я только что установил Docker на CentOS 8. Все прошло нормально, я запустил тестовый контейнер hello_world, и результат был успешным. Проблема в том, что внутри контейнеров я не могу разрешить DNS-запросы.

Например, когда я набираю ping 8.8.8.8 (для любого базового контейнера, такого как Ubuntu или CentOS), я получаю правильный ответ, но когда попробуйте запустить ping google.com Я не получил никакого ответа, это означает, что контейнер не может разрешить DNS для любого URL.

Я также попытался запустить базовый контейнер, как этот:

docker run busybox ping -c 1 192.203.230.10

и я получаю (правильный) вывод:

[server@localhost ~]$ docker run busybox ping -c 1 192.203.230.10
PING 192.203.230.10 (192.203.230.10): 56 data bytes
64 bytes from 192.203.230.10: seq=0 ttl=51 time=32.413 ms
--- 192.203.230.10 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 32.413/32.413/32.413 ms

Но теперь пытаюсь разрешить домен google.com с помощью команды:

docker run busybox nslookup google.com

Я получаю этот вывод :

[server@localhost ~]$ docker run busybox nslookup google.com
nslookup: write to '8.8.8.8': No route to host
nslookup: write to '8.8.4.4': No route to host
;; connection timed out; no servers could be reached

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

На машине с CentOS 8:

[server@localhost ~]$ cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4

Внутри любого Docker контейнера :

bash-4.4# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4

Это выглядит как нормальная и рабочая конфигурация, но когда я пытаюсь пинговать google.com (внутри контейнеров), я получаю:

bash-4.4# ping google.com
ping: google.com: Try again

Какие новые вещи я могу попробовать?

1 Ответ

0 голосов
/ 02 мая 2020

Решение проблемы, по-видимому, заключается в добавлении docker в качестве доверенного интерфейса в firewalld с помощью команды:

firewall-cmd --permanent --zone=trusted --add-interface=docker0

и последующей перезагрузке firewalld с помощью:

firewall-cmd --reload

После он должен работать правильно (не забудьте перезагрузить компьютер)

...