Не удается загрузить изображения Docker за прокси

Я установил Docker на свою Ubuntu 13.10 (Saucy Salamander) и когда я печатаю в консоли:

sudo docker pull busybox

Я получаю следующую ошибку:

Pulling repository busybox
2014/04/16 09:37:07 Get https://index.docker.io/v1/repositories/busybox/images: dial tcp: lookup index.docker.io on 127.0.1.1:53: no answer from server

Версия Docker:

$ sudo docker version

Client version: 0.10.0
Client API version: 1.10
Go version (client): go1.2.1
Git commit (client): dc9c28f
Server version: 0.10.0
Server API version: 1.10
Git commit (server): dc9c28f
Go version (server): go1.2.1
Last stable version: 0.10.0

Я нахожусь за прокси-сервером без аутентификации, и это мой файл /etc/apt/apt.conf:

Acquire::http::proxy "http://192.168.1.1:3128/";
Acquire::https::proxy "https://192.168.1.1:3128/";
Acquire::ftp::proxy "ftp://192.168.1.1:3128/";
Acquire::socks::proxy "socks://192.168.1.1:3128/";

Что я делаю не так?

Ответ 1

Вот ссылка на официальную документацию Docker для прокси HTTP: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Краткое описание:

Сначала создайте системный каталог для службы Docker:

mkdir /etc/systemd/system/docker.service.d

Теперь создайте файл с именем /etc/systemd/system/docker.service.d/http-proxy.conf, в который добавится переменная среды HTTP_PROXY:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

Если у вас есть внутренние реестры Docker, с которыми вам нужно связаться без прокси, вы можете указать их через переменную среды NO_PROXY:

Environment="HTTP_PROXY=http://proxy.example.com:80/"
Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"

Сброс изменений:

$ sudo systemctl daemon-reload

Убедитесь, что конфигурация была загружена:

$ sudo systemctl show --property Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/

Перезапустите Docker:

$ sudo systemctl restart docker

Ответ 2

Настройки прокси-сервера APT не связаны с Docker.

Docker использует переменную среды HTTP_PROXY, если она есть. Например:

sudo HTTP_PROXY=http://192.168.1.1:3128/ docker pull busybox

Но вместо этого я предлагаю вам взглянуть на ваш файл конфигурации /etc/default/docker: у вас должна быть строка, чтобы раскомментировать (и, возможно, настроить), чтобы ваши настройки прокси применялись автоматически. Затем перезапустите сервер Docker:

service docker restart

Ответ 3

В CentOS файл конфигурации для Docker находится по адресу:

/etc/sysconfig/docker

Добавление строки ниже помогло мне заставить демона Docker работать за прокси-сервером:

HTTP_PROXY="http://<proxy_host>:<proxy_port>"
HTTPS_PROXY="http://<proxy_host>:<proxy_port>"

Ответ 4

Если вы используете новый Docker для Mac (или Docker для Windows), просто щелкните правой кнопкой мыши значок панели Докере и выберите "Настройки" (Windows: Настройки), затем перейдите в раздел "Дополнительно", а в разделе "Прокси" укажите настройки прокси-сервера. Нажмите "Применить" и "Перезапустить" и дождитесь перезагрузки Docker.

Ответ 5

В Ubuntu вам нужно установить http_proxy для демона Docker, а не клиентский процесс. Это сделано в /etc/default/docker (см. здесь).

Ответ 6

Чтобы расширить ответ аруна, чтобы это работало в CentOS 7, мне пришлось удалить команды "export". Так что редактируйте

/etc/sysconfig/docker

И добавить:

HTTP_PROXY="http://<proxy_host>:<proxy_port>"
HTTPS_PROXY="https://<proxy_host>:<proxy_port>"
http_proxy="${HTTP_PROXY}"
https_proxy="${HTTPS_PROXY}"

Затем перезапустите Docker:

sudo service docker restart

Источником является этот пост в блоге.

Ответ 7

Почему локально связанный прокси не работает

Проблема

Если вы используете локально связанный прокси-сервер, например. прослушивая 127.0.0.1:8989, он НЕ РАБОТАЕТ в Docker для Mac. Из Документация докеров:

Я хочу подключиться из контейнера к службе на хосте

У Mac есть изменяющийся IP-адрес (или нет, если у вас нет доступа к сети). Наша нынешняя рекомендация - подключить неиспользуемый IP к интерфейсу lo0 на Mac; например: sudo ifconfig lo0 alias 10.200.10.1/24 и убедитесь, что ваша служба прослушивает этот адрес или 0.0.0.0 (т.е. не 127.0.0.1). Затем контейнеры могут подключаться к этому адресу.

Аналогично для сервера Docker. (Чтобы понять серверную и клиентскую стороны Docker, попробуйте запустить docker version.) И серверная сторона работает на уровне виртуализации, у которого есть свой localhost. Поэтому он не будет подключаться к прокси-серверу на localhost основной ОС.

Решение

Итак, если вы используете локально связанный прокси-сервер, такой как я, в основном вам нужно будет выполнить следующие действия, чтобы заставить его работать с Docker для Mac:

  • Сделайте свой прокси-сервер прослушиванием 0.0.0.0 вместо 127.0.0.1. Предостережение: вам потребуется правильная настройка брандмауэра, чтобы предотвратить вредоносный доступ к ней.

  • Добавьте псевдоним loopback в интерфейс lo0, например. 10.200.10.1/24:

    sudo ifconfig lo0 alias 10.200.10.1/24
    
  • Установите HTTP и/или HTTPS-прокси на 10.200.10.1:8989 из настроек в меню лотка докеров (предположим, что прокси-сервер прослушивает порт 8989).

После этого проверьте настройки прокси-сервера, запустив команду в новом контейнере из образа, который не загружен:

$ docker rmi -f hello-world
  ...

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

c04b14da8d14: Pull complete 
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
  ...

Примечание: псевдоним loopback, установленный ifconfig, не сохраняется после перезагрузки. Сделать его упорным - это еще одна тема. Пожалуйста, проверьте это сообщение в блоге на японском языке (Google Translate может помочь).

Ответ 8

Это исправление, которое работало для меня: Ubuntu, версия Docker: 1.6.2

В файле /etc/default/docker добавьте строку:

export http_proxy='http://<host>:<port>'

Перезапустите Docker

sudo service docker restart

Ответ 9

Чтобы настроить Docker для работы с прокси-сервером, необходимо добавить переменную среды HTTPS_PROXY/HTTP_PROXY в файл sysconfig Docker (/etc/sysconfig/docker).

В зависимости от того, используете ли вы init.d или сервисный инструмент, вам нужно добавить оператор "export" (из-за журналов отчетов об ошибках Debian - # 767441. Примеры в /etc/default/docker вводят в заблуждение относительно поддерживаемого синтаксиса):

HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
export HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
export HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"

Хранилище Docker (Docker Hub) поддерживает только HTTPS. Чтобы Docker работал с перехватчиками SSL, необходимо добавить корневой сертификат прокси в хранилище доверенных сертификатов системы.

Для CentOS скопируйте файл в /etc/pki/ca-trust/source/anchors/, обновите хранилище доверенных сертификатов CA и перезапустите службу Docker.

Если ваш прокси-сервер использует проверку подлинности NTLMv2 - вам нужно использовать промежуточные прокси-серверы, такие как Cntlm, чтобы соединить аутентификацию. Это сообщение в блоге объясняет это подробно.

Ответ 10

После установки Docker сделайте следующее:

[[email protected] ~]$ sudo HTTP_PROXY=http://proxy02.ie.xyz.net:80 ./docker -d &
[2] 20880

Затем вы можете тянуть или делать что-либо:

[email protected] ~]$ sudo docker pull base
2014/04/11 00:46:02 POST /v1.10/images/create?fromImage=base&tag=
[/var/lib/docker|aa088847] +job pull(base, )
Pulling repository base
b750fe79269d: Download complete
27cf78414709: Download complete
[/var/lib/docker|aa088847] -job pull(base, ) = OK (0)

Ответ 11

В новой версии Docker, docker-engine, в дистрибутиве systemd вы должны добавить строку переменной среды в /lib/systemd/system/docker.service, так как упоминается другими:

Environment="HTTP_PROXY=http://hostname_or_ip:port/"

Ответ 12

Чтобы решить проблему с curl в сборке Docker, я добавил в Dockerfile следующее:

ENV http_proxy=http://infoprx2:8080
ENV https_proxy=http://infoprx2:8080
RUN apt-get update && apt-get install -y curl vim

Обратите внимание, что оператор ENV - ДО оператора RUN.

И чтобы демон Docker мог выходить в Интернет (я использую Kitematic с boot2docker), я добавил в /var/lib/boot2docker/profile следующее:

export HTTP_PROXY=http://infoprx2:8080
export HTTPS_PROXY=http://infoprx2:8080

Затем я перезапустил Docker с sudo /etc/init.d/docker restart.

Ответ 13

Пока я не могу комментировать:

Для CentOS 7 мне нужно было активировать EnvironmentFile в "docker.service", как описано здесь: Управление и настройка Docker с помощью systemd.

Изменение: я добавляю свое решение, как указано Nilesh. Мне нужно было открыть "/etc/systemd/system/docker.service", и я должен был добавить в разделе

[Service]

EnvironmentFile=-/etc/sysconfig/docker

Только тогда в моей системе был загружен файл "etc/sysconfig/docker".

Ответ 14

Простая установка переменных окружения прокси не помогла мне в версии 1.0.1... Мне пришлось обновить файл /etc/default/docker.io, указав правильное значение для переменной http_proxy.

Ответ 15

Если вы используете прокси socks5, вот мой тест с Docker 17.03.1-ce с настройкой "all_proxy", и он сработал:

# Set up socks5 proxy server
ssh [email protected] -C -N -g -D \
     proxyServerIp:9999 \
     -o ExitOnForwardFailure=yes \
     -o ServerAliveInterval=60

# Configure dockerd and restart.
# NOTICE: using "all_proxy"
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="all_proxy=socks5://proxyServerIp:9999"
Environment="NO_PROXY=localhost,127.0.0.1,private.docker.registry.com"
EOF

systemctl daemon-reload
systemctl restart docker

# Test whether can pull images
docker run -it --rm alpine:3.5

Ответ 16

Возможно, вам нужно установить строчные переменные. В моем случае мой /etc/systemd/system/docker.service.d/http-proxy.conf файл выглядит следующим образом:

[Service]
Environment="ftp_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"
Environment="http_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"
Environment="https_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"

Удачи! :)

Ответ 17

Если вы находитесь в Ubuntu, выполните эти команды, чтобы добавить свой прокси.

sudo nano /etc/default/docker

И раскомментируйте строки, которые указывают

#export http_proxy = http://username:[email protected]:8050

И замените его соответствующим прокси-сервером и именем пользователя.

Затем перезапустите Docker, используя:

service docker restart

Теперь вы можете запускать команды Docker через прокси:

docker search ubuntu

Ответ 18

Если вы находитесь в Ubuntu, вы должны выполнить эту команду:

export https_proxy=http://your_name:[email protected]_proxy:port docker 

И перезагрузите Docker с помощью:

service docker.io restart

Или перейдите к /etc/docker.io с нано...

Ответ 19

В Ubuntu 14.04 (Trusty Tahr) с Docker 1.9.1 я просто раскомментировал строку http_proxy, обновил значение и затем перезапустил службу Docker.

export http_proxy="http://proxy.server.com:80"

а затем

service docker restart

Ответ 20

Полное решение для Windows, для настройки параметров прокси.

< user>:< password>@< proxy-host>:< proxy-port>

Вы можете настроить его напрямую, щелкнув правой кнопкой мыши на настройках, на значке Docker, а затем на Прокси.

Там вы можете настроить адрес прокси, порт, имя пользователя и пароль.

В этом формате:

< user>:< password>@< proxy-host>:< proxy-port>

Пример:

"geronimous:[email protected]:8080"

Ничего больше, чем это.

Ответ 21

Попробуйте это:

sudo HTTP_PROXY=http://<IP address of proxy server:port> docker -d & 

Ответ 22

В RHEL6.6 работает только это (обратите внимание на использование export):

/и т.д./sysconfig/Докер

export http_proxy="http://myproxy.example.com:8080"
export https_proxy="http://myproxy.example.com:8080"

ПРИМЕЧАНИЕ. Оба могут использовать протокол http.)

Благодаря https://crondev.com/running-docker-behind-proxy/

Ответ 23

В моей сети Ubuntu работает за корпоративным прокси-сервером ISA. И это требует аутентификации. Я перепробовал все решения, упомянутые выше, и ничего не помогло. Что действительно помогло, так это написать строку прокси в файле /etc/systemd/system/docker.service.d/https-proxy.conf без имени домена.

Вместо

Environment="HTTP_PROXY=http://[email protected]:[email protected]:8080"

или

Environment="HTTP_PROXY=http://domain\user:[email protected]:8080"

и некоторые другие замены, такие как @ -> %40 или \ -> \\, которые я пытался использовать

Environment="HTTP_PROXY=http://user:[email protected]:8080"

И теперь это работает.

Ответ 24

Я также столкнулся с той же проблемой за брандмауэром. Выполните следующие действия:

$ sudo vim /etc/systemd/system/docker.service.d/http_proxy.conf
[Service]
Environment="HTTP_PROXY=http://username:[email protected]:port/"

Не используйте и не удаляйте файл https_prxoy.conf.

Перезагрузите и перезапустите контейнер Docker:

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557*********************************8
Status: Downloaded newer image for hello-world:latest