Не удается загрузить изображения 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