Docker build "не удалось решить 'archive.ubuntu.com '" apt-get не удается установить что-либо
Я пытался запустить Docker build на различных файлах, которые ранее работали раньше, которые теперь больше не работают.
Как только файл Docker включал любую строку, которая должна была установить программное обеспечение, он не будет работать с сообщением о том, что пакет не найден.
RUN apt-get -y install supervisor nodejs npm
общее сообщение, которое появилось в журналах, было
Could not resolve 'archive.ubuntu.com'
любая идея, почему любое программное обеспечение не будут установлены?
11 ответов:
комментарий
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"на/etc/default/dockerкак Matt Carrier предлагали ли не работать на меня. И не помещал DNS-серверы моей корпорации в этот файл. Но есть и другой способ (читайте далее).во-первых, давайте проверим проблему:
$ docker run --rm busybox nslookup google.com # takes a long time nslookup: can't resolve 'google.com' # <--- appears after a long time Server: 8.8.8.8 Address 1: 8.8.8.8если команда, кажется, зависает, но в конечном итоге выплевывает ошибку " не могу решить 'google.com-тогда у тебя та же проблема, что и у меня.
The
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-сервера:
$ nmcli dev show | grep 'IP4.DNS' IP4.DNS[1]: 10.0.0.2 IP4.DNS[2]: 10.0.0.3используя эти адреса, создайте файл
/etc/docker/daemon.json:$ sudo su root # cd /etc/docker # touch daemon.jsonпоставить это в
/etc/docker/daemon.json:{ "dns": ["10.0.0.2", "10.0.0.3"] }выход из корня:
# exitТеперь перезагрузите настройки:
$ sudo service docker restartпроверка:
сейчас проверю это добавление
/etc/docker/daemon.jsonфайл позволяет решить 'google.com' В IP-адрес:$ docker run --rm busybox nslookup google.com Server: 10.0.0.2 Address 1: 10.0.0.2 Name: google.com Address 1: 2a00:1450:4009:811::200e lhr26s02-in-x200e.1e100.net Address 2: 216.58.198.174 lhr25s10-in-f14.1e100.netссылки:
я основал свое решение на статье Робина Уинслоу,который заслуживает всю заслугу за решение. Спасибо, Робин!
" исправить конфигурацию DNS сети Докера.- Робин Уинслоу. Восстановлено 2016-11-09. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
после долгой головной боли я нашел ответ.
Could not resolve 'archive.ubuntu.com'можно исправить, сделав следующие изменения:
раскомментируйте следующую строку
/etc/default/dockerDOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"перезапустите службу Docker
sudo service docker restartудалите все изображения, которые кэшировали недопустимые настройки DNS.
- построить снова, и проблема должна быть решена.
кредит идет на Андрей SB
я считаю, что ответ Мэтта Кэрриера является правильным решением для этой проблемы. Однако после его реализации я все равно наблюдал такое же поведение:
could not resolve 'archive.ubuntu.com'.это привело меня к тому, что в конечном итоге я обнаружил, что сеть, к которой я был подключен, блокирует общедоступный DNS. Решение этой проблемы состояло в том, чтобы настроить мой контейнер Docker для использования того же сервера имен, что и мой хост (машина, с которой я запускал Docker).
Как Я сортировка:
- поскольку я работал с документацией Docker, у меня уже был пример образа, установленного на моей машине. Я смог запустить новый контейнер для запуска этого образа и создать новый сеанс bash в этом контейнере:
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-адрес сервера имен в разрешение контейнера.файл conf:sudo vi /etc/resolv.conf. После сохранения я снова попытался выполнить ping (ping google.com) и на этот раз это сработало!обратите внимание, что изменения, внесенные в контейнер файл resolv.conf не являются постоянными и будут потеряны при перезапуске контейнера. В моем случае более подходящим решением было добавить IP-адрес сервера имен моей сети к хосту .
после добавления локального dns ip в файл docker по умолчанию он начал работать для меня... пожалуйста, найдите следующие шаги...
$ nm-tool # (will give you the dns IP)DNS: 172.168.7.2
$ vim /etc/default/docker # (uncomment the DOCKER_OPTS and add DNS IP) DOCKER_OPTS="--dns 172.168.7.2 --dns 8.8.8.8 --dns 8.8.4.4" $ rm `docker ps --no-trunc -aq` # (remove all the containers to avoid DNS cache) $ docker rmi $(docker images -q) # (remove all the images) $ service docker restart #(restart the docker to pick up dns setting)теперь идите вперед и построить докер... :)
для тех, кто также имеет эту проблему, я решил свою проблему путем редактирования
/etc/default/dockerфайл, как предлагается другими ответами и вопросами. Однако я понятия не имел, какой IP использовать в качестве DNS.только через некоторое время я понял, что мне нужно бежать
ifconfig dockerна хосте, чтобы показать IP для сетевого интерфейса docker.docker0 Link encap:Ethernet Endereço de HW 02:42:69:ba:b4:07 inet end.: 172.17.0.1 Bcast:0.0.0.0 Masc:255.255.0.0 endereço inet6: fe80::42:69ff:feba:b407/64 Escopo:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1 pacotes RX:8433 erros:0 descartados:0 excesso:0 quadro:0 Pacotes TX:9876 erros:0 descartados:0 excesso:0 portadora:0 colisões:0 txqueuelen:0 RX bytes:484195 (484.1 KB) TX bytes:24564528 (24.5 MB)Он был
172.17.0.1в моем случае. Надеюсь, это поможет всем, кто также имеет эту проблему.
Я столкнуться с той же проблемой, но нейтер раскомментировав / etc / default/docker записи dns и редактирование / etc / resolv.conf в контейнере сборки или / etc/docker / daemon.json помогает мне.
но после того, как я построил с опцией --network=host, разрешение снова было в порядке.
docker build --network=host -t my-own-ubuntu-like-image .может быть, это поможет кому-то еще.
Я просто хотел добавить поздний ответ для тех, кто сталкивается с этой проблемой из поисковых систем.
не делайте этого: раньше у меня была опция в /etc/default/docker для установки
iptables=false. Это было потому, что ufw не работал (все было открыто, хотя только 3 порта были разрешены), поэтому я слепо следовал ответу на этот вопрос:незамысловатый Брандмауэр (UFW) ничего не блокирует при использовании Docker и это, которое было связано в комментарииу меня очень низкое понимание правил iptables / nat / routing в целом, поэтому я мог бы сделать что-то иррациональное.
оказывается, что я, вероятно, неправильно настроил его и убил разрешение DNS внутри моих контейнеров. Когда я запустил интерактивный контейнерный терминал:
docker run -i -t ubuntu:14.04 /bin/bashу меня следующие результаты:
root@6b0d832700db:/# ping google.com ping: unknown host google.com root@6b0d832700db:/# cat /etc/resolv.conf search online.net nameserver 8.8.8.8 nameserver 8.8.4.4 root@6b0d832700db:/# 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=56 time=1.76 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.72 msвозврат всей моей конфигурации ufw (раньше.правила), отключение ufw и удаление iptables=false из /etc/default / docker восстановил функциональность разрешения DNS контейнеров.
Теперь я с нетерпением жду повторного включения функциональности ufw, следуя эти инструкции.
нашел ответ после некоторых Googleing. Я использую Windows, поэтому некоторые из приведенных выше ответов не относятся к моей файловой системе.
В общем:
docker-machine ssh default echo "nameserver 8.8.8.8" > /etc/resolv.confкоторый просто перезаписывает существующий сервер имен, используемый с
8.8.8.8Я верю. Это сработало для меня!
у меня такая же проблема, и я попытался выполнить указанные шаги, но, похоже, никто не работает, пока не обновит настройки сети.
действия:
- как уже упоминалось, добавьте
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"до/etc/default/docker.- вручную промойте содержимое таблицы предварительной маршрутизации с помощью
iptables -t nat -F POSTROUTING. После запуска этого перезапустите docker, и он инициализирует таблицу nat с новым диапазоном IP.
та же проблема для меня (на Ubuntu Xenial).
docker run --dns ...для контейнеров работал.- обновление параметров демона docker для
docker build(docker-compose etc.) не получилось.после анализа журналов 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_OPTS="--dns 172.18.20.13 --dns 172.20.100.29 --dns 8.8.8.8"а затем я перезапустил свой ноутбук.
в моем случае перезапуск docker daemon недостаточно для меня, я должен перезагрузить свой ноутбук, чтобы заставить его работать.
Comments