У меня проблема с моими контейнерами Docker на Ubuntu 14.04 LTS. Docker работал нормально в течение двух дней, а затем внезапно я потерял все сетевое соединение внутри своих контейнеров. Вывод ошибки ниже первоначально привел меня к мысли, что это произошло потому, что apt-get пытается разрешить DNS через IPv6.
Я отключил IPv6 на своем хост-компьютере и все еще, удалил все образы, вытащил базовую Ubuntu и все еще столкнулся с проблемой.
Я изменил свои серверы имен /etc/resolve.conf со своего локального DNS-сервера на общедоступные DNS-серверы Google (8.8.8.8 и 8.8.4.4), но все еще не повезло. Я также установил DNS для Google в DOCKER_OPTS / etc / default / docker и перезапустил docker.
Я также попытался вытащить coreos, и yum также не смог разрешить DNS.
Это странно, потому что, хотя DNS не работает, я все равно получаю ответ, когда пингую те же серверы обновлений, которые apt-get не может разрешить.
Я не за прокси, я в очень стандартной локальной сети, и эта версия Ubuntu актуальна и свежа (я установил два дня назад, чтобы быть ближе к докеру).
Я тщательно исследовал это в других статьях по stackoverflow и github, но не нашел решения. У меня нет идей относительно того, как решить эту проблему, кто-нибудь может помочь?
Сообщение об ошибке
➜ arthouse git:(docker) ✗ docker build --no-cache .
Sending build context to Docker daemon 51.03 MB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04
---> 5506de2b643b
Step 1 : RUN apt-get update
---> Running in 845ae6abd1e0
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://archive.ubuntu.com trusty-security InRelease
Err http://archive.ubuntu.com trusty-proposed InRelease
Err http://archive.ubuntu.com trusty Release.gpg
Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-updates Release.gpg
Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-security Release.gpg
Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-proposed Release.gpg
Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Some index files failed to download. They have been ignored, or old ones used instead.
Контейнер IFCONFIG / PING
➜ code docker run -it ubuntu /bin/bash
root@7bc182bf87bb:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:04
inet addr:172.17.0.4 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:738 (738.0 B) TX bytes:648 (648.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@7bc182bf87bb:/# ping google.com
PING google.com (74.125.226.0) 56(84) bytes of data.
64 bytes from lga15s42-in-f0.1e100.net (74.125.226.0): icmp_seq=1 ttl=56 time=12.3 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 12.367/12.367/12.367/0.000 ms
root@7bc182bf87bb:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=21.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=21.7 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=44 time=21.7 ms
Кроме того, обновление apt-get завершается неудачно, когда я запускаю IPv4:
root@6d925cdf84ad:/# sudo apt-get update -o Acquire::ForceIPv4=true
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://archive.ubuntu.com trusty-security InRelease
Err http://archive.ubuntu.com trusty-proposed InRelease
Err http://archive.ubuntu.com trusty Release.gpg
Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-updates Release.gpg
Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-security Release.gpg
Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-proposed Release.gpg
Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
источник
Ответы:
Ву, я нашел пост на github, который решил мою проблему.
После того, как Стив К. указал, что это на самом деле не проблема DNS, а проблема с подключением, я смог найти сообщение на github, в котором описывалось, как решить эту проблему.
Видимо, сетевой мост docker0 завис. Установка bridge-utils и запуск следующего привели мой Docker в рабочее состояние:
источник
ip link set down docker0
вместоifconfig docker0 down
иsystemctl restart docker
вместоservice docker start
. Чтобы удалить все изображения, я сделалdocker rmi $(docker images -q)
/etc/init.d/docker restart
и он вернулся к делуЕсли это проблема распознавателя DNS, вот решение:
Первое, что нужно проверить, - запустить
cat /etc/resolv.conf
в контейнере Docker . Если он имеет недопустимый DNS-сервер, напримерnameserver 127.0.x.x
, контейнер не сможет преобразовать доменные имена в IP-адреса, поэтомуping google.com
произойдет сбой.Второе, что нужно проверить, - запустить
cat /etc/resolv.conf
на хост-компьютере . Docker в основном копирует хост/etc/resolv.conf
в контейнер при каждом запуске контейнера. Так что, если хост/etc/resolv.conf
неверен, то и контейнер докеров.Если вы обнаружили, что хост
/etc/resolv.conf
неверен, то у вас есть 2 варианта:Жесткий код DNS-сервера в daemon.json. Это легко, но не идеально, если вы ожидаете изменения DNS-сервера.
Починить хозяев
/etc/resolv.conf
. Это немного сложнее, но генерируется динамически, и вы не программируете DNS-сервер.1. Жесткий код DNS-сервера в Docker Daemon.json
редактировать
/etc/docker/daemon.json
Перезапустите демон docker, чтобы эти изменения вступили в силу:
sudo systemctl restart docker
Теперь, когда вы запускаете / запускаете контейнер, докер будет заполняться
/etc/resolv.conf
значениями изdaemon.json
.2. Исправить хозяев
/etc/resolv.conf
A. Ubuntu 16.04 и ранее
Для Ubuntu 16.04 и более ранних версий
/etc/resolv.conf
был динамически сгенерирован NetworkManager.Закомментируйте строку
dns=dnsmasq
(с#
) в/etc/NetworkManager/NetworkManager.conf
Перезапустите NetworkManager для регенерации
/etc/resolv.conf
:sudo systemctl restart network-manager
Проверьте на хосте:
cat /etc/resolv.conf
Б. Убунту 18.04 и позже
Ubuntu 18.04 изменено для использования
systemd-resolved
для генерации/etc/resolv.conf
. Теперь по умолчанию он использует локальный кеш DNS 127.0.0.53. Это не будет работать внутри контейнера, поэтому Docker по умолчанию будет использовать DNS-сервер Google 8.8.8.8, который может сломаться для людей за брандмауэром./etc/resolv.conf
на самом деле это символическая ссылка (ls -l /etc/resolv.conf
), которая/run/systemd/resolve/stub-resolv.conf
по умолчанию указывает на (127.0.0.53) в Ubuntu 18.04.Просто измените символическую ссылку, на
/run/systemd/resolve/resolv.conf
которую указывает реальный DNS-сервер:sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Проверьте на хосте:
cat /etc/resolv.conf
Теперь у вас должен быть действующий
/etc/resolv.conf
на хосте докер для копирования в контейнеры.источник
systemd
пакета ...В попытке добавить дополнительную ценность к проблеме, которую я также испытал; с альтернативным ответом:
Моя сеть была связана с офисом, и настройки DNS Google были заблокированы, чтобы контейнер мог пропинговать IP-адреса, но не доменные имена.
Мой хозяин
/etc/resolv.conf
изначально выглядел как;Это связано с тем, что Network Manager выполняет некоторую маскировку данных DNS-сервера.
К сожалению, согласно руководствам докера docker будет отфильтровывать любые локальные IP-адреса при сборке контейнера resolv.conf и заменять их DNS-IP-адресами Google. Что в моем случае привело к запрету доменных имен.
Мне пришлось:
/etc/default/docker
значения по умолчанию, чтобы вместо них контейнеры использовали содержимое resolv.conf моего хоста./etc/NetworkManager/NetworManager.conf
и закомментируйте строкуdns=dnsmasq
. Это необходимо для того, чтобы NM мог указывать фактические IP-адреса DNS вместо 127.0.0.1.sudo service network-manager restart
.sudo service docker restart
.apt-get update/upgrade
Например, запуск контейнера позволил бы ему это сделать .источник
Ваша ошибка здесь:
Это не ошибка DNS, вместо этого ваша система пытается подключиться к хостам IPv6 и не работает. Предположительно, потому что у вас нет доступа к IPv6 на вашем хосте. Фактический поиск IPv6-адреса успешен. (Зеркало / архив ubuntu доступно как для IPv6, так и для IPv4. Вам просто не повезло, чтобы запустить IPv6, потому что ваша система считает, что он должен работать.)
Вы должны либо исправить это, установив miredo , либо повторить попытку, пока не попадете в зеркало IPv4.
Опять же, здесь важно понять, что DNS не виноват, как вы можете видеть по собственным тестам ping.
источник
Официальный документ Docker предоставляет инструменты для настройки DNS-сервера для использования Docker
Откройте
/etc/default/docker
файл для редактирования:Добавьте настройку для Docker:
Заменить
8.8.8.8
на локальный DNS-сервер, такой как192.168.1.1
. Вы также можете указать несколько DNS-серверов. Разделил их пробелами, например:Предупреждение. Если вы делаете это на ноутбуке, подключенном к различным сетям, обязательно выберите общедоступный DNS-сервер.
PS:
nm-tool
может использоваться для проверки локального хоста DNS-сервераСохраните и закройте файл.
Перезапустите демон Docker.
источник
/etc/docker/daemon.json
настройки демона docker, такие как dns.Для других читателей, которые приходят сюда при использовании boot2docker, вот как я это исправил. На самом деле, ответ выше указал мне правильное направление.
По сути, по какой-то причине контейнеры внутри boot2docker не могут разрешить имена хостов.
Поэтому я просто перезапустил boot2docker и запустил контейнеры. Теперь имена хостов могут снова разрешиться правильно.
Я предполагаю, что проблема заключалась в запуске boot2docker во время подключения к сети на хосте, что привело к загрузке boot2docker и переходу в нерабочее состояние.
источник
У меня была такая же проблема на Windows. Эта команда заставила меня работать:
docker-machine restart
источник
Перезапустите демон Docker в Debian9
service docker restart
и соединения и сети работает нормально
источник
Была похожая проблема, но разрешение имен между контейнерами внутри определенной пользователем сети казалось немного странным. Некоторые не могут решить ничего, как вы.
Проблема была в перемещении / var / lib / docker. По космическим причинам он был смонтирован через NFS. Добавление локальной файловой системы и перемещение файлов туда решает проблему.
источник