Я пытался запустить сборку Docker для различных файлов, которые раньше работали, а теперь уже не работают.
Как только файл Docker включал любую строку, предназначенную для установки программного обеспечения, он завершался ошибкой с сообщением о том, что пакет не найден.
RUN apt-get -y install supervisor nodejs npm
Обычное сообщение, которое появлялось в журналах, было
Could not resolve 'archive.ubuntu.com'
Есть идеи, почему никакое программное обеспечение не устанавливается?
newgrp docker
вместо полного выхода из системы, а затем авторизуюсь после того, как предоставил себеsudo usermod -aG docker myuserid
... это крайний случай для конечно, однако это действительно происходитОтветы:
Раскомментировав
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
в/etc/default/docker
качестве Matt Carrier предложил ничего НЕ работать для меня. Не помещал в этот файл и DNS-серверы моей корпорации. Но есть другой способ (читайте дальше).Во-первых, давайте проверим проблему:
Если кажется, что команда зависает, но в конечном итоге выдает ошибку «не удается разрешить 'google.com'», значит, у вас та же проблема, что и у меня.
Команда
nslookup
запрашивает DNS-сервер 8.8.8.8, чтобы преобразовать текстовый адрес google.com в IP-адрес. Как ни странно, 8.8.8.8 - это общедоступный DNS-сервер Google . В случаеnslookup
сбоя общедоступные DNS-серверы, такие как 8.8.8.8, могут быть заблокированы вашей компанией (что, как я полагаю, из соображений безопасности).Можно подумать , что добавление DNS - серверов вашей компании , чтобы
DOCKER_OPTS
в системе/etc/default/docker
должно сделать трюк, но по какой - то причине, это не работа для меня. Ниже я описываю, что у меня работало.РЕШЕНИЕ :
На хосте (я использую Ubuntu 16.04) узнайте адреса первичного и вторичного DNS-серверов:
Используя эти адреса, создайте файл
/etc/docker/daemon.json
:Поместите это в
/etc/docker/daemon.json
:Выход из корня:
Теперь перезапустите докер:
ВЕРИФИКАЦИЯ :
Теперь убедитесь, что добавление
/etc/docker/daemon.json
файла позволяет преобразовать google.com в IP-адрес:ЛИТЕРАТУРА :
Я основал свое решение на статье Робина Уинслоу, который заслуживает всей признательности за это решение. Спасибо, Робин!
"Исправить конфигурацию DNS сети Docker." Робин Уинслоу. Проверено 9 ноября 2016. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
источник
nslookup google.com 8.8.8.8
В моем случае это так, я получил эту ошибкуconnection timed out; no servers could be reached
/etc/default/docker
не сработала для некоторых людей (цитируя комментарий из файла)# THIS FILE DOES NOT APPLY TO SYSTEMD
После долгой головной боли я нашел ответ.
Could not resolve 'archive.ubuntu.com'
можно исправить, внеся следующие изменения:Раскомментируйте следующую строку в
/etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Перезапустите службу Docker
sudo service docker restart
Удалите все изображения, в которых кэшированы недопустимые настройки DNS.
Кредит принадлежит Эндрю С.Б.
источник
docker build --no-cache=true ...
docker build --no-cache=true -t docker-whale .
но, похоже, ничего другого не произошло.Я сталкиваюсь с той же проблемой, но мне не помогает раскомментирование записей / etc / default / docker dns и редактирование /etc/resolv.conf в контейнере сборки или /etc/docker/daemon.json .
Но после того, как я построил с опцией --network = host, разрешение снова было в порядке.
Может быть, это снова кому-то поможет.
источник
Я считаю, что ответ Мэтта Кэрриера - правильное решение этой проблемы. Тем не менее, после его реализации, я по- прежнему наблюдается такое же поведение:
could not resolve 'archive.ubuntu.com'
.Это привело меня к тому, что в конце концов я обнаружил, что сеть, к которой я был подключен, блокирует общедоступный DNS. Решением этой проблемы было настроить мой контейнер Docker на использование того же сервера имен, что и мой хост (машина, с которой я запускал Docker).
Как я отсортировал:
docker run -it docker/whalesay bash
ping 172.217.4.238
(google.com)ping google.com
В моем случае первый
ping
результат дал ответы, второй - нет.Как я исправил:
Как только я обнаружил, что DNS не работает внутри контейнера, я подтвердил, что могу воспроизвести такое же поведение на хосте.
nslookup google.com
решается просто отлично на хосте. Но,nslookup google.com 8.8.8.8
илиnsloookup google.com 8.8.4.4
истекло время.Затем я нашел серверы имен, которые использовал мой хост
nm-tool
(в Ubuntu 14.04). В духе быстрой обратной связи, я завела пример изображения снова, и добавила IP - адрес сервера имен в файл resolv.conf контейнера:sudo vi /etc/resolv.conf
. После сохранения я снова попытался проверить связь (ping google.com
), и на этот раз это сработало!Обратите внимание, что изменения, внесенные в файл resolv.conf контейнера, не являются постоянными и будут потеряны при перезапуске контейнера. В моем случае более подходящим решением было добавить IP-адрес моего сетевого сервера имен в
/etc/default/docker
файл хоста .источник
nmcli device show <interfacename> | grep IP4.DNS
(Ubuntu> = 15) иnmcli dev list iface <interfacename> | grep IP4
(Ubuntu <15). Предоставлено: Марти Фрид .После добавления локального IP-адреса DNS в файл докеров по умолчанию он начал работать для меня ... пожалуйста, найдите следующие шаги ...
Теперь идите и создайте докер ... :)
источник
Для всех, у кого также есть эта проблема, я решил свою проблему, отредактировав
/etc/default/docker
файл, как это было предложено другими ответами и вопросами. Однако я понятия не имел, какой IP использовать в качестве DNS.Только через некоторое время я понял, что мне нужно запустить
ifconfig docker
на хосте, чтобы показать IP для сетевого интерфейса докера.Так было
172.17.0.1
в моем случае. Надеюсь, это поможет всем, у кого также есть эта проблема.источник
ifconfig docker0
Я нашел этот ответ после некоторого поиска в Google. Я использую Windows, поэтому некоторые из приведенных выше ответов не применимы к моей файловой системе.
В основном запускают:
Который просто перезаписывает существующий сервер имен, используемый, как
8.8.8.8
мне кажется. У меня это сработало!Судя по некоторым комментариям, возможно, вам понадобится root. Для этого нужно выпустить
sudo -i
.источник
ssh
что не существует?sudo -i
только выЯ просто хотел добавить поздний ответ для всех, кто сталкивается с этой проблемой в поисковых системах.
НЕ делайте этого: раньше у меня была опция в / etc / default / docker для установки
iptables=false
. Это произошло потому, что ufw не работал (все было открыто, хотя было разрешено только 3 порта), поэтому я слепо последовал ответу на этот вопрос: Несложный брандмауэр (UFW) ничего не блокирует при использовании Docker. и это, которое было связано в КомментарииЯ очень плохо разбираюсь в правилах / нат / маршрутизации iptables в целом, поэтому я мог сделать что-то иррациональное.
Оказывается, я, вероятно, неправильно его сконфигурировал и убил разрешение DNS внутри своих контейнеров. Когда я запустил интерактивный контейнерный терминал:
docker run -i -t ubuntu:14.04 /bin/bash
У меня были такие результаты:
Восстановление всей моей конфигурации ufw (до rules), отключение ufw и удаление iptables = false из / etc / default / docker восстановили функциональность разрешения DNS контейнеров.
Теперь я с нетерпением жду возможности повторно включить функциональность ufw, следуя этим инструкциям .
источник
У меня такая же проблема, и я попробовал указанные шаги, но, похоже, ничего не работает, пока не обновите настройки сети.
Шаги:
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"
в/etc/default/docker
.iptables -t nat -F POSTROUTING
. После запуска перезапустите докер, и он инициализирует таблицу nat с новым диапазоном IP-адресов.источник
Такая же проблема для меня (на Ubuntu Xenial).
docker run --dns ...
для контейнеров работал.docker build
(docker-compose и т. Д.) Не сработало.После анализа журналов docker (
journalctl -u docker.service
), если обнаружено какое-то предупреждение о применении плохого resolvconf.После этого я обнаружил, что наши корпоративные серверы имен были добавлены к сетевым интерфейсам, но не в resolvconf.
Применил это решение. Как настроить статический DNS в интерфейсах? (askubuntu) , т.е. добавление серверов имен в
/etc/resolvconf/resolv.conf.d/tail
После обновления resolvconf (или перезагрузки).
bash docker run --rm busybox nslookup google.com
сработало мгновенно.
Все мои сборки docker-compose сейчас работают.
источник
Сегодня у меня такая же проблема, я просто добавил строку ниже в / etc / default / docker
а затем я перезапустил свой ноутбук.
В моем случае перезапуска демона докеров мне недостаточно, мне нужно перезагрузить ноутбук, чтобы он заработал.
источник
Прежде чем тратить слишком много времени на другие решения, просто перезапустите Docker и попробуйте еще раз.
Решил проблему для меня, используя Docker Desktop для Windows в Windows 10.
источник
Я тоже некоторое время боролся с этим сейчас, но вот что решило это для меня
Ubuntu 16.04 x64
. Надеюсь, это тоже сэкономит чье-то время.В
/etc/NetworkManager/NetworkManager.conf
: закомментировать#dns=dnsmasq
Создать (или изменить)
/etc/docker/daemon.json
:sudo service docker restart
источник
В моей системе (
macOS High Sierra 10.13.6
сDocker 2.1.0.1
) это произошло из-за корпоративного прокси.Я решил это в два этапа:
Preferences>Proxies
Добавьте те же настройки в свой config.json внутри,
~/.docker/config.json
например:источник