Подтвердить что ты не робот

Dockerfile: Docker build не может загружать пакеты: centos-> yum, debian/ubuntu-> apt-get за интрасеть

ПРОБЛЕМА: любая сборка с файлом Docker в зависимости от centos, ubuntu или debian не может быть создана.

ОКРУЖАЮЩАЯ СРЕДА: У меня есть Mac OS X, работаю с VMWare с гостевым Ubuntu 14.04, запустив Docker:

[email protected] ~ $ sudo docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): d84a070
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): d84a070

ПОВЕДЕНИЕ: Использование "docker build" не позволяет загружать пакеты. Вот пример такого файла Docker: https://github.com/Krijger/docker-cookbooks/blob/master/jdk8-oracle/Dockerfile, https://github.com/ottenhoff/centos-java/blob/master/Dockerfile

Я знаю, что мы можем запустить контейнер с -dns, но это во время сборки.

  • CENTOS

    FROM centos RUN yum install a b c

  • UBUNTU

    ОТ ubuntu RUN apt-get install a b c

Пользователи сообщили, что это могут быть проблемы с настройкой DNS, другие, а в конфигурации есть DNS-серверы Google, прокомментированные.

Step 2 : RUN yum install -y curl; yum upgrade -y; yum update -y;  yum clean all
 ---> Running in 5f11b65c87b8
Loaded plugins: fastestmirror
Couldn't resolve host 'mirrorlist.centos.org

Все еще проблема сохранялась... Итак, большинство пользователей в # docker @Freenode упомянули, что это может быть проблема с конфигурацией DNS... Итак, здесь мой Ubuntu:

$ sudo cat /etc/resolv.conf 
nameserver 127.0.1.1
search localdomain

Я попытался изменить это, ту же проблему...

4b9b3361

Ответ 1

ПРОБЛЕМА

Говоря с некоторыми разработчиками в # docker @freenode, проблема была понятна всем: DNS и окружающая среда. Строительство прекрасно работает при обычном подключении к Интернету дома.

РЕШЕНИЕ:

Эта проблема возникает в среде, где есть частный DNS-сервер, или сеть блокирует DNS-серверы Google. Даже если контейнер докеров может выполнить ping 8.8.8.8, сборка по-прежнему должна иметь доступ к одному и тому же частному DNS-серверу за вашим брандмауэром или центром данных.

Запустите демон Docker с помощью переключателя --dns, чтобы указать на ваш частный DNS-сервер, как и ваша конфигурация вашего хоста. Это было найдено путем проб и ошибок.

Подробнее

У моей ОС Mac OS X, ОС хоста, был настроен другой DNS, указанный на моем /etc/resolv.conf:

[email protected] ~ (mac) $ cat /etc/resolv.conf
search corp.my-private-company.net
nameserver 172.18.20.13
nameserver 172.20.100.29

Мой хост может отбрасывать пакеты на IP-адрес Google 8.8.8.8 при создании... Я просто взял эти 2 IP-адреса и разместил их под конфигурацией демона Ubuntu:

[email protected] ~ $ cat /etc/default/docker
...
...
# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="--dns 172.18.20.13 --dns 172.20.100.29 --dns 8.8.8.8"
...

Теперь сборка работает так, как ожидалось!

$ sudo ./build.sh 
Sending build context to Docker daemon 7.168 kB
Sending build context to Docker daemon 
Step 0 : FROM centos
 ---> b157b77b1a65
Step 1 : MAINTAINER [email protected]
 ---> Running in 49bc6e233e4c
 ---> 2a380810ffda
Removing intermediate container 49bc6e233e4c
Step 2 : RUN yum install -y curl; yum upgrade -y; yum update -y;  yum clean all
 ---> Running in 5f11b65c87b8
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirror.supremebytes.com
 * extras: centos.mirror.ndchost.com
 * updates: mirrors.tummy.com
Resolving Dependencies
--> Running transaction check
---> Package systemd.x86_64 0:208-11.el7 will be updated
---> Package systemd.x86_64 0:208-11.el7_0.2 will be an update
---> Package systemd-libs.x86_64 0:208-11.el7 will be updated
---> Package systemd-libs.x86_64 0:208-11.el7_0.2 will be an update
--> Finished Dependency Resolution

Благодаря @BrianF и другим, кто помог в канале IRC!

Постоянное решение VM - ОБНОВЛЕНИЕ 2 ИЮЛЯ 2015 г.

Теперь у нас есть GitHub Enterprise и CoreOS Enterprise Docker Registry... Итак, для меня было важно добавить корпоративные DNS-серверы с машины HOST, чтобы заставить VM работать.

Замена/etc/resolv.conf из гостевой ОС с помощью Host/etc/resolv.conf также устраняет проблему! Докер 1.7.0. Я только что создал новую виртуальную машину с использованием Ubuntu 15.04 на VMWare Fusion, и у меня снова возникла эта проблема...

/etc/resolv.conf ПЕРЕД

~/dev/github/public/stackedit on ⭠ master ⌚ 20:31:02
$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
search localdomain

/etc/resolv.conf ПОСЛЕ *

~/dev/github/public/stackedit on ⭠ master ⌚ 20:56:09
$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
search corp.mycompany.net
nameserver 10.180.194.35
nameserver 10.180.194.36
nameserver 192.168.1.1

Ответ 2

У меня была такая же проблема. Предоставленное решение не помогло в моем случае. Но это сработало, как только я обновил свой Dockerfile, добавив переменные среды для прокси-сервера.

ENV HTTP_PROXY http://<proxy_host>:<port>
ENV HTTPS_PROXY http://<proxy_host>:<port>
ENV http_proxy http://<proxy_host>:<port>
ENV https_proxy http://<proxy_host>:<port>

Ответ 3

Вероятно, это связано с тем, что локальный сервер кеширования, прослушивающий 127.0.1.1, который недоступен из контейнера.

Попробуйте ввести следующее в Dockerfile:

CMD "sh" "-c" "echo nameserver 8.8.8.8 > /etc/resolv.conf"

Ответ 4

также просто добавление серверов имен из хоста (в моем случае mac osx) на докер-машину vm решает проблему.

Ответ 5

Для меня проблема заключалась в том, что мой интернет-провайдер заблокировал DNS-сервер google (8.8.8.8), который использует docker как резервный по умолчанию.

Трюк здесь заключается в том, чтобы узнать свой IP-адрес DNS и сказать, что он использует его.

В моем случае (работает Ubuntu 17.04), попытка получить эту информацию из /etc/resolv.conf не работала, но я использовал эту команду:

nmcli dev show | grep IP4.DNS

Затем я взял этот IP и добавил в /etc/defaults/docker:

DOCKER_OPTS="--dns 192.168.50.1"

Теперь перезапустите демон docker и попробуйте создать еще раз.