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

Не удается установить пакеты пакетов внутри контейнера докеров с помощью Ubuntu

Я следую примеру fig guide, используя докеры с приложением 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 не может получить доступ к каким-либо пакетам из контейнера докеров. Есть ли что-нибудь, что мне нужно сделать, чтобы разрешить ему доступ в Интернет?

Однако протокол работает отлично, чтобы установить вещи за пределами контейнера докеров, и работал нормально даже с этим точным пакетом (blinker==1.3), чтобы не проблема. Также эта проблема не специфична для этого пакета. Я получаю ту же проблему с любой командой pip install для любого пакета.

Кто-нибудь знает, что здесь происходит?

4b9b3361

Ответ 1

Ваша проблема связана с тем, что Docker не использует надлежащий DNS-сервер. Вы можете исправить это тремя способами:

1. Добавление DNS Google в локальную конфигурацию

Изменение/etc/resolv.conf и добавление следующих строк в конец

# Google IPv4 nameservers nameserver 8.8.8.8 nameserver 8.8.4.4

Если вы хотите добавить другие DNS-серверы, посмотрите здесь.

Однако это изменение не будет постоянным (см. этот поток). Чтобы сделать его постоянным: $ sudo nano /etc/dhcp/dhclient.conf Раскомментируйте и отредактируйте строку с помощью preend domain-name-server: prepend domain-name-servers 8.8.8.8, 8.8.4.4;

Перезапустить dhclient: $ sudo dhclient.

2. Изменение конфигурации Docker

Как объясняется в документах:

Системы, которые запускают Ubuntu или производную Ubuntu на рабочем столе, обычно используют 127.0.0.1 в качестве сервера имен по умолчанию в файле /etc/resolv.conf.

Чтобы указать DNS-сервер для использования 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

Ответ 2

хорошо, перезапуск моей докер-машины решает проблему. спасибо - исмаилсунни

Это было решение для меня:

docker-machine restart <machine-name>

Ответ 3

У меня была та же самая проблема, и она мучила меня некоторое время, и я попробовал много решений онлайн, но безрезультатно. Однако я наконец решил это следующим образом:

Бег:

Ubuntu 16.04 
docker Server 18.03.0-ce
  1. Узнайте адрес вашего DNS-сервера.

    Найдите адрес вашего DNS-сервера, выполнив следующую команду:

    $: nmcli dev show | grep 'IP4.DNS'
    IP4.DNS[1]:                192.168.210.2
    
  2. Обновите демон Docker

    Создайте файл конфигурации докера в /etc/docker/daemon.json. (если у вас его еще нет) и добавьте в файл следующее содержимое:

    {
        "dns": ["192.168.210.2", "8.8.8.8"]
    }
    

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

    Сохраните файл и перезапустите сервис докера

    $: sudo service docker restart
    

Ответ 4

Мне просто удалось перезапустить демон docker.

service docker restart

Ответ 5

Для пользователей Ubuntu

Вам нужно добавить новые адреса DNS в конфигурации докера

sudo nano /lib/systemd/system/docker.service

Добавьте днс после 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

Затем сделайте:

systemctl daemon-reload
sudo service docker restart

Должно сработать.

Ответ 6

В моем случае с docker version 1.13.0 и docker-machine 0.9.0 под Ubuntu 16.04 мне пришлось немного изменить ответ Tanzaho (2. Modifying Docker config) следующим образом:

  • Войдите в Ubuntu как пользователь с привилегиями sudo.

  • Откройте файл /etc/default/docker для редактирования:

    sudo vim /etc/default/docker
    
  • Добавьте следующий параметр для Docker.

    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    
  • Сохраните и закройте файл.

  • Перезапустите демон Docker:

    sudo service docker restart
    

Ответ 7

Мне не удалось установить pip из-за неправильной настройки докера DNS. Я попробовал описанные выше шаги, однако, настройка докера DNS для Google DNS не работает для моего ноутбука. Docker DNS может быть правильно настроен только в том случае, если я установлю его DNS на назначенный IP-адрес ноутбука.

Если вы используете Ubuntu, вы можете использовать следующие шаги для настройки вашего докера DNS:

  1. Узнайте ваше устройство, назначенный IP. Вы можете найти это либо

    • Проверка inet-адреса вашей локальной сети или wlan в ifconfig
    • Выбор любого адреса в nmcli dev show | grep 'DNS' nmcli dev show | grep 'DNS'
  2. Отредактируйте dns в /etc/docker/daemon.json (создайте этот файл, если он не существовал ранее)

    {
        "dns": ["your_ip_in_step_1"]
    }
    
  3. Перезапустить докер: перезапуск докера sudo service docker restart

Ответ 8

Как новичок в 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 имело для меня значение. В случае, если это полезно для тех, кто с этой проблемой.

Ответ 9

Мне нужно было добавить --network = host к моей команде сборки docker:

docker build --network=host -t image_name .

Ответ 10

Я не знаю причины, но ошибка означает, что pip пытается разрешить /simple/blinker/ как имя хоста DNS вместо части pypi.python.org, что кажется очень странным, поскольку я даже не могу найти какой-либо URL для который urlparse может возвращать такую ​​строку, как часть имени хоста. Я бы проверить, есть ли проблемы с ~/.pip/pip.conf

Ответ 11

Пусть он работает. Иногда у 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

Ответ 12

У меня была такая же проблема. Причиной ошибки является прокси.

Итак, я редактирую следующий Dockerfile

RUN pip install -r /app/requirements.txt --proxy=http://user:[email protected]:port

Ответ 13

Настройка 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.

Изменен днс в /etc/docker/daemon.json

{
    "dns": ["the DNS ip from step1"]
}

Restart docker: sudo service docker restart

Ответ 14

Я новичок в Docker и попробовал все методы, упомянутые здесь, но все еще не понял это правильно. версия Docker была 18, а версия Ubuntu была 16. Я попробовал этот метод: - Сначала я строил докер с корпоративной интернет-сетью. эта сеть блокирует некоторые сайты или что-то вроде того, что здесь не очень хорошо. Итак, во-вторых, я подключился к своей собственной сети (которую я использую в мобильном телефоне, например) и попытался. все прошло хорошо. require.txt был успешно установлен, и сборщик Docker был собран.

Ответ 15

Для меня это было вызвано подключением к моему университетскому VPN. Отключение "решило" проблему.

Ответ 16

В случае, если кто-то читает это с помощью docker-compose. Мне удалось решить эту проблему, изменив мой файл yaml следующим образом

version: 3.4
service: my-app
  build:
  context: .
  network: host

что эквивалентно письму

docker build . --network host