Docker build "не удалось решить 'archive.ubuntu.com '" apt-get не удается установить что-либо



Я пытался запустить Docker build на различных файлах, которые ранее работали раньше, которые теперь больше не работают.



Как только файл Docker включал любую строку, которая должна была установить программное обеспечение, он не будет работать с сообщением о том, что пакет не найден.



RUN apt-get -y install supervisor nodejs npm


общее сообщение, которое появилось в журналах, было



Could not resolve 'archive.ubuntu.com'


любая идея, почему любое программное обеспечение не будут установлены?

700   11  

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' можно исправить, сделав следующие изменения:

  1. раскомментируйте следующую строку /etc/default/docker
    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

  2. перезапустите службу Docker sudo service docker restart

  3. удалите все изображения, которые кэшировали недопустимые настройки DNS.

  4. построить снова, и проблема должна быть решена.

кредит идет на Андрей SB

я считаю, что ответ Мэтта Кэрриера является правильным решением для этой проблемы. Однако после его реализации я все равно наблюдал такое же поведение:could not resolve 'archive.ubuntu.com'.

это привело меня к тому, что в конечном итоге я обнаружил, что сеть, к которой я был подключен, блокирует общедоступный DNS. Решение этой проблемы состояло в том, чтобы настроить мой контейнер Docker для использования того же сервера имен, что и мой хост (машина, с которой я запускал Docker).

Как Я сортировка:

  1. поскольку я работал с документацией Docker, у меня уже был пример образа, установленного на моей машине. Я смог запустить новый контейнер для запуска этого образа и создать новый сеанс bash в этом контейнере:docker run -it docker/whalesay bash
  2. есть ли у контейнера подключение к интернету?:ping 172.217.4.238 (google.com)
  3. может ли контейнер разрешать имена хостов? 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 Я верю. Это сработало для меня!

у меня такая же проблема, и я попытался выполнить указанные шаги, но, похоже, никто не работает, пока не обновит настройки сети.

действия:

  1. как уже упоминалось, добавьте DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true" до /etc/default/docker.
  2. вручную промойте содержимое таблицы предварительной маршрутизации с помощью 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

    Ничего не найдено.