Я следую руководству fig по использованию докера с приложением python, но когда докер подбирается к команде
RUN pip install -r requirements.txt
Я получаю следующее сообщение об ошибке:
Step 3 : RUN pip install -r requirements.txt
---> Running in fe0b84217ad1
Collecting blinker==1.3 (from -r requirements.txt (line 1))
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connection aborted.', gaierror(-2, 'Name or service not known'))': /simple/blinker/
Это повторяется несколько раз, а затем я получаю еще одно сообщение:
Could not find any downloads that satisfy the requirement blinker==1.3 (from -r requirements.txt (line 1))
No distributions at all found for blinker==1.3 (from -r requirements.txt (line 1))
Поэтому по какой-то причине pip не может получить доступ к каким-либо пакетам из контейнера докеров. Что мне нужно сделать, чтобы разрешить ему доступ в Интернет?
Однако pip отлично работает для установки вещей за пределами контейнера докеров и отлично работает даже с этим точным package ( blinker==1.3
), так что это не проблема. Также эта проблема не относится к этому пакету. У меня такая же проблема с любой pip install
командой для любого пакета.
Кто-нибудь знает, что здесь происходит?
docker run mycontainer pip install -r requirements.pip
вне фигового контекста пробовали ? Тем не менее, похоже, что это проблема с версией pip. Для некоторых более новых версий pip вам нужно указать дополнительные параметры командной строки при запуске,pip install
чтобы он нашел определенные пакеты.FROM python:2.7
какая-то версия pip, которая поставляется с python 2.7.9. Я не пробовал запускать команды pip отдельно, но это потому, что я даже не могу собрать контейнер, поскольку pip не работает. Я мог бы попробовать сделать пустой контейнер для питона и протестировать его, когда у меня будет возможностьpip install --no-use-wheel --allow-all-external -r requirements.pip
или, если это не поможет, попробуйтеpip install --no-use-wheel --allow-all-external --allow-unverified blinker -r requirements.pip
. Это работало для меня в прошлом, когда у меня была похожая ошибка сpip install
. Также вы можете попытаться удалить эту строку из DockerFile, а затем построить контейнер без нее, чтобы проверить, может ли команда выполняться впоследствии. Как уже было сказано, я не думаю, что здесь проблема.Ответы:
Ваша проблема связана с тем, что Docker не использует правильный DNS-сервер. Вы можете исправить это тремя разными способами:
1. Добавление Google DNS в вашу локальную конфигурацию
Изменение /etc/resolv.conf и добавление следующих строк в конце
# Google IPv4 nameservers nameserver 8.8.8.8 nameserver 8.8.4.4
Если вы хотите добавить другие DNS-серверы, посмотрите здесь .
Однако это изменение не будет постоянным (см. Эту ветку ). Чтобы сделать его постоянным:
$ sudo nano /etc/dhcp/dhclient.conf
раскомментируйте и отредактируйте строку с добавлением сервера доменного имени:prepend domain-name-servers 8.8.8.8, 8.8.4.4;
Перезапуск dhclient:
$ sudo dhclient
.2. Изменение конфигурации Docker
Как объяснено в документах :
1. Log into Ubuntu as a user with sudo privileges. 2. Open the /etc/default/docker file for editing : $ sudo nano /etc/default/docker 3. Add the following setting for Docker. DOCKER_OPTS="--dns 8.8.8.8" 4. Save and close the file. 5. Restart the Docker daemon : $ sudo systemctl restart docker
3. Использование параметра при запуске Docker
Когда вы запускаете докер, просто добавьте следующий параметр:
--dns 8.8.8.8
источник
--dns
флаг доступен только поdocker
команде. Я пока не могу найти аналог для Docker-Compose.Мне нужно было добавить --network = host в мою команду сборки докера:
источник
У меня была такая же проблема, и она беспокоила меня некоторое время, и я пробовал много решений в Интернете, но безрезультатно. Однако я наконец решил это следующим образом:
Бег:
Ubuntu 16.04 docker Server 18.03.0-ce
Узнайте адрес вашего DNS-сервера.
Узнайте адрес своего DNS-сервера, выполнив следующую команду:
$: nmcli dev show | grep 'IP4.DNS' IP4.DNS[1]: 192.168.210.2
Обновите демон Docker
Создайте файл конфигурации докера
/etc/docker/daemon.json.
( если у вас его еще нет ) и добавьте в файл следующее содержимое:{ "dns": ["192.168.210.2", "8.8.8.8"] }
Первый элемент массива - это DNS-сервер вашей сети, а второй - DNS-сервер Google в качестве запасного варианта, если DNS вашей сети недоступен.
Сохраните файл, а затем перезапустите службу докеров.
источник
docker-ce
. Примечание: у меня не было файлаdaemon.json
. Вероятно, этот файл не создается по умолчанию при установке, и вам нужно создать его вручную.Для меня это было решением:
источник
docker-machine restart
а затемdocker-machine env
(как он меня побуждал), и проблема была устранена.Мне помог простой перезапуск docker daemon.
источник
Для пользователей Ubuntu
Вам нужно добавить новые адреса DNS в конфиг докера
Добавьте DNS после ExecStar.
--dns 10.252.252.252 --dns 10.253.253.253
Должно получиться так:
ExecStart=/usr/bin/dockerd -H fd:// --dns 10.252.252.252 --dns 10.253.253.253
Затем сделайте:
Должно сработать.
источник
16.04
, Docker17.03.1-ce
.16.04
Docker,17.09.0-ce
и это не работаетВ моем случае с
docker version 1.13.0
иdocker-machine 0.9.0
подUbuntu 16.04
мне пришлось немного изменить ответ Танзахо (2. Изменение конфигурации Docker) следующим образом:Войдите в Ubuntu как пользователь с привилегиями sudo.
Откройте файл / etc / default / docker для редактирования:
Добавьте следующий параметр для Docker.
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Сохраните и закройте файл.
Перезапустите демон Docker:
источник
Если кто-то читает это, используя docker-compose. Мне удалось решить эту проблему, изменив файл yaml следующим образом
version: 3.4 service: my-app build: context: . network: host
что эквивалентно написанию
источник
Для меня мне не удалось установить pip из-за неправильной настройки DNS докера. Я пробовал описанные выше шаги, однако настройка Docker DNS на Google DNS не работает для моего ноутбука. DNS Docker можно правильно настроить, только если я настрою его DNS на IP-адрес, назначенный моему ноутбуку.
Если вы используете Ubuntu, вы можете использовать следующие шаги для настройки DNS вашего докера:
Узнайте назначенный IP-адрес вашего устройства. Вы можете найти это либо
ifconfig
nmcli dev show | grep 'DNS'
Отредактируйте dns в
/etc/docker/daemon.json
(создайте этот файл, если он не существует ранее){ "dns": ["your_ip_in_step_1"] }
Перезагрузите докер:
sudo service docker restart
источник
Как новичок в Docker, у меня возникла проблема, которая проявлялась таким образом, когда я следил за учебником по Docker по адресу:
https://docs.docker.com/get-started/part2
Я использую Docker 17.03.1-ce в корпоративной локальной сети.
Я проверил и дважды проверил свои настройки DNS. Я использовал различные способы настройки DNS, которые я нашел при поиске в Интернете. Некоторые вызывали ошибки при запуске. Подход, который я в конечном итоге выбрал для настройки DNS, был описан в разделе «Устранение неполадок Linux» указанной выше ссылки, где DNS настраивается через файл daemon.json в каталоге / etc / docker.
Однако у меня все еще была такая же проблема. Что в конечном итоге решило проблему для меня, так это настройка прокси-сервера через переменные среды http_proxy и https_proxy . У меня они были указаны в моем Dockerfile, но я не сделал этого до команды RUN pip.
Несмотря на то, что это казалось проблемой DNS, перемещение этих команд ENV перед командой RUN имело для меня значение. В случае, если это полезно для тех, у кого есть эта проблема.
источник
Я не знаю причины, но ошибка означает, что pip пытается разрешить
/simple/blinker/
как имя хоста DNS, а неpypi.python.org
часть, что кажется очень странным, так как я даже не могу придумать какой-либо URL-адрес, для которогоurlparse
можно было бы вернуть такую строку как имя хоста часть. Я бы проверил, есть ли проблемы с~/.pip/pip.conf
источник
У меня была такая же проблема. Причина ошибки - прокси.
Итак, я редактирую Dockerfile, следуя
RUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port
источник
Для меня это было вызвано подключением к моей университетской VPN. Отключение "решило" проблему.
источник
Настройка docker DNS на Google DNS (8.8.8.8) или 10.0.0.2 не работала в среде моей компании.
Запуск: $ Drill @ 8.8.8.8 www.amazon.com или @ 10.0.0.2 подтвердили это.
Чтобы найти работающий DNS, я запустил: $ Drill www.amazon.com, и он дал мне IP-адрес DNS, который используется в моей сети.
Затем я установил его в Ubuntu, используя следующий шаг для настройки DNS докеров.
Изменен DNS в /etc/docker/daemon.json
{ "dns": ["the DNS ip from step1"] } Restart docker: sudo service docker restart
источник
Я новичок в Docker и пробовал все методы, упомянутые здесь, но все еще не понял. версия Docker была 18, а версия ubuntu - 16. Я попробовал этот метод: - Сначала я собирал докер с интернет-сетью компании. эта сеть блокирует некоторые сайты или что-то здесь как-то не ладится. Итак, во-вторых, я подключился к своей собственной сети (которую я использую, например, в мобильном телефоне) и попробовал. все пошло хорошо. require.txt был успешно установлен, и docker был собран.
источник
Пусть работает. Иногда у pypi возникают проблемы с подключением, которые шумно бросаются вам в лицо, чтобы вы думали, что он сломан. Чтобы быть уверенным, дайте ему поработать, вы можете обнаружить, что он сам справится.
Итог, несмотря на эти красные строки ошибок, - «Успешно построено».
$ docker build . Sending build context to Docker daemon 2.048 kB Step 1 : FROM docker-registry.aws.example.com:5000/cmcrc/python2:20160517120608 ---> 1e5034711aa9 Step 2 : RUN pip install prometheus-client requests ---> Running in f3c580fc93ae Collecting prometheus-client Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8610>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d87d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8990>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8b50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8d10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Downloading prometheus_client-0.0.13.tar.gz Collecting requests Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9d4d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9da10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dc50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9de10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dfd0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Downloading requests-2.10.0-py2.py3-none-any.whl (506kB) Building wheels for collected packages: prometheus-client Running setup.py bdist_wheel for prometheus-client: started Running setup.py bdist_wheel for prometheus-client: finished with status 'done' Stored in directory: /root/.cache/pip/wheels/04/94/f5/b803b2ff65e8344e99ca99b7f7cb8194224017167809a32b78 Successfully built prometheus-client Installing collected packages: prometheus-client, requests Successfully installed prometheus-client-0.0.13 requests-2.10.0 ---> 19c5e3cfe08f Removing intermediate container f3c580fc93ae Successfully built 19c5e3cfe08f
источник