Я начинаю работать с Docker контейнерами и у меня проблема с разрешением DNS из контейнера. Похоже, есть много вопросов о StackOverflow, похожих на эту проблему, но я не могу ее решить.
Я на хосте CentOS Linux 7.7.1908. Я построил новый контейнер на этой машине и добавил его в существующий файл docker -compose.yml.
Но в моем контейнере что-то отсутствует - DNS внутри него не работает , Другие контейнеры, запущенные с docker -compose, не имеют этой проблемы.
При docker -compose запуск моего нового контейнера и существующего контейнера, работающего с DNS, выглядит одинаково, что-то вроде следующего :
existingcontainer:
image: johnson/job1:2.1.0
environment:
JAVA_OPTS: " -Xms256m -Xmx512m"
ports:
- 8090:8090
newcontainer:
image: johnson/job2:1.0.0
environment:
JAVA_OPTS: " -Xms256m -Xmx512m"
ports:
- 8091:8090
Контейнеры запускаются, и функциональность в них обоих работает нормально, за исключением того, что в новом контейнере DNS не работает.
docker container exec existingcontainer_1 ping google.com
PING google.com (172.217.12.238) 56(84) bytes of data.
...
docker container exec newcontainer_1 ping google.com
ping: google.com: Name or service not known
docker container exec newcontainer_1 ping 172.217.12.238
PING google.com (172.217.12.238) 56(84) bytes of data.
...
Итак, разрешение DNS не работает работа с newcontainer, но есть возможность доступа к inte rnet через IP-адрес. Я пришел к выводу, что в контейнере отсутствует какая-либо конфигурация.
docker container exec existingcontainer_1 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.15 2a51cabe0eaf
docker container exec newcontainer_1 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.11 0c73f229b689
docker container exec existingcontainer_1 cat /etc/resolv.conf
search ec2.internal
nameserver 127.0.0.11
options ndots::0
docker container exec newcontainer_1 cat /etc/resolv.conf
search ec2.internal
nameserver 127.0.0.11
options ndots::0
Сетевые конфигурации для DNS выглядят одинаково.
На основании некоторых статей я добавил следующий параметр ExecStart в docker. служебный файл для принудительной установки DNS-сервера и перезапуска docker и контейнеров docker:
--dns 8.8.8.8
Но после этого я вижу то же поведение - DNS не работает на новом контейнер. Кроме того, поскольку DNS уже работал в некоторых контейнерах, но не в новом, поэтому я думаю, что правильное исправление не является глобальным, как это, - похоже, нужно внести изменения в новый контейнер.
Для устранения неполадок в контейнере я также обнаружил, что ряд стандартных утилит, по-видимому, недоступен в среде контейнера, например netstat и iptables. Я мог бы просто скопировать их с хоста в контейнер?
Как лучше всего это отладить?