Ошибка сборки Docker: не удалось подключиться к серверу (за прокси)

Контекст: ОС: Windows 10 Pro; Докер вер: 18.09.0 (сборка 4d60db4); За корпоративным прокси-сервером с использованием CNTLM для решения этой проблемы . (в настоящее время вытягивание / запуск изображения работает нормально)

Проблема: я пытался создать следующий Dockerfile:

FROM alpine:3.5
RUN apk add --update \
    python3
RUN pip3 install bottle
EXPOSE 8000
COPY main.py /main.py
CMD python3 /main.py

Вот что у меня получилось:

Sending build context to Docker daemon  11.26kB
Step 1/6 : FROM alpine:3.5
 ---> dc496f71dbb5
Step 2/6 : RUN apk add --update     python3
 ---> Running in 7f5099b20192
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.5/main: could not connect to server (check repositories file)
WARNING: Ignoring APKINDEX.c51f8f92.tar.gz: No such file or directory
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.5/community: could not connect to server (check repositories file)
WARNING: Ignoring APKINDEX.d09172fd.tar.gz: No such file or directory
ERROR: unsatisfiable constraints:
  python3 (missing):
    required by: world[python3]
The command '/bin/sh -c apk add --update     python3' returned a non-zero code: 1

Мне удалось получить доступ к URL-адресу из браузера, поэтому с самим сервером проблем нет.

Я подозревал, что это как-то связано с тем, что прокси-сервер не распространяется в контейнер, как описано в этот вопрос, так как я также не получил строку http_proxy при запуске docker run alpine env. Однако после внесения прокси в конфигурационный файл он наконец появился. Но проблема все еще существует.

Я также попытался изменить DNS в соответствии с инструкциями, указанными здесь, но проблема все еще не решена.


person Leonard AB    schedule 28.11.2018    source источник
comment
Это было для меня полезным.   -  person Zeinab Abbasimazar    schedule 18.02.2020


Ответы (2)


Мне, наконец, удалось решить эту проблему, и виновата была моя настройка в CNTLM. Историю предыстории можно найти в этом сообщении.

Основная причина этой проблемы заключается в том, что контейнер докеров не может получить доступ к Интернету внутри виртуальной машины из-за неправильной настройки IP-адреса внутри CNTLM.ini.

Обычно CNTLM по умолчанию слушает 127.0.0.1:3128 для пересылки прокси. Я придерживался значения по умолчанию и, таким образом, установил настройку прокси в Docker (для демона - через графический интерфейс, а для контейнера - от до config.json) также установлен на этот адрес и порт. Оказывается, этот «локальный хост» не применяется к виртуальной машине, на которой находится докер, поскольку виртуальная машина имеет свой собственный локальный хост. Короче говоря, решение состоит в том, чтобы изменить этот адрес на IP-адрес dockerNAT (10.0.75.1:3128) во всех следующих местах:

  • CNTLM.ini (в строке Listen. На самом деле, если мы используем CNTLM и для других целей, можно предоставить более одной строки Listen)
  • Прокси-сервер демона Docker (через графический интерфейс настройки Docker)
  • Контейнер Docker config.json (обычно в C:\Users\<username>\.docker), добавив следующие строки:

    "proxies":
     {
       "default":
       {
         "httpProxy": "http://10.0.75.1:3128",
         "httpsProxy": "http://10.0.75.1:3128",
         "noProxy": <your no_proxy>
       }
     }
    

также проверьте эти связанные сообщения:

person Leonard AB    schedule 30.11.2018
comment
В моем случае прослушивание с разных ip не помогло. Я заставил его работать, используя host host.docker.internal для прокси в config.json - person Simon30; 04.05.2021

Вы можете попробовать создать свой файл докера с помощью следующей команды:

docker build --build-arg http_proxy=http://your.proxy:8080 --build-arg http_proxy=http://your.proxy:8080 -t yourimage .
person Mario Khoury    schedule 10.03.2021