Как отладить DNS не работает для Docker Контейнер? - PullRequest
0 голосов
/ 01 марта 2020

Я начинаю работать с 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. Я мог бы просто скопировать их с хоста в контейнер?

Как лучше всего это отладить?

...