Неможливо завантажити зображення Docker за проксі


330

Я встановив 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

Версія докера:

$ 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/";

Що я роблю неправильно?


6
Для користувачів Windows , і boot2docker см stackoverflow.com/a/29303930/6309
VonC

1
Одна незначна деталь: apt зовсім не підтримує проксі-сервери SOCKS. Acquire::socks::proxyозначає встановити проксі-сервер для всіх URL-адрес, починаючи зі socksсхеми. Оскільки у вас sources.listнемає socks://URL-адрес, цей рядок повністю ігнорується.
Ганс-Крістоф Штайнер

Про що docker-compose?
Мохаммед Масумі

Відповіді:


796

Ось посилання на офіційну документацію 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

3
Це працює для Debian Jessie під керуванням Docker 1.6.2. Якось редагування /etc/default/dockerне працює. Можливо, мені слід зняти, exportяк той, що документально підтверджений для Centos.
неврит

2
Для старих SysV редагувати / etc / sysconfig / docker, як у docs.oracle.com/cd/E37670_01/E37355/html/… - Oracle Linux 6.7
SidJ

2
NB: Я припускав, що 'daemon-reload' буде достатньо, щоб застосувати зміни до докера, але насправді sudo systemctl restart dockerце строго потрібно, щоб він працював.
Хосе Альбан

4
Щодо ubuntu 14.04, зверніться до відповіді @ n3o, оскільки systemctl це не доступно для ubuntu 14.04, він використовує upstartдля підключення служб.
chinmay

4
Тепер він повертає "Потрібна автентифікація проксі" ... як налаштувати ім'я користувача та пароль?
pinei

88

Ваші налаштування проксі-серверів APT не пов’язані з Docker.

Docker використовує змінну середовища HTTP_PROXY, якщо вона присутня. Наприклад:

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

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

service docker restart

8
У моєму випадку / etc / default / docker містився приклад нижнього регістру (http_proxy), але для того, щоб все працювало, мені довелося додати туди великі параметри (HTTP_PROXY).
Мекк

не слід встановлювати HTTP_PROXY для клієнта
докера

3
Не працює з docker 1.9.1, натомість дивіться цю відповідь нижче
Петро Дотчев

1
Це працює для Ubuntu 14.04 під час встановлення докера з apt.dockerproject.org.
Майкл Копп

1
На Debian 8.8 це не працює, і вам потрібно встановити http_proxy в /etc/systemd/system/docker.service.d, як показано у прийнятій відповіді
Роман Мік

60

У CentOS файл конфігурації для Docker знаходиться за адресою:

/etc/sysconfig/docker

Додавання нижче рядка допомогло мені змусити демон Docker працювати за проксі-сервером:

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

7
export HTTP_PROXY = "http: // <ім'я користувача>: <password> @ <proxy_host>: <proxy_port>" для тих, хто стоїть за корпоративними проксі
Nicolas Mommaerts

для мене це працювало ТОЛЬКО без того export. Ви впевнені, що це правильно?
франси

4
Для мене exportпрацює лише в CentOS6 і без Centos7
user2363318

1
На Centos7 мені також довелося не використовувати експорт
Banjocat

2
export HTTP_PROXY=...це башизм, для не-башівських оболонок (наприклад, що / bin / sh може бути), використовуйте два рядки, HTTP_PROXY=...і тоді, export HTTP_PROXY сказав, мені це зовсім не потрібно export.
Камерон Керр

42

Якщо ви використовуєте новий Docker для Mac (або Docker для Windows ), просто клацніть правою кнопкою миші піктограму лотка Docker і виберіть Налаштування (Windows: Налаштування), потім перейдіть у розділ Додатково і в розділі Проксі вкажіть там свої настройки проксі-сервера. Клацніть Застосувати та перезапустити і зачекайте, поки Докер перезапуститься.


Якщо хтось використовує локально пов'язаний проксі (наприклад, 127.0.0.1:8787 ) на macOS, як я, ось докладніший посібник із налаштування: Чому локально пов'язаний проксі не працює
Rockallite

Я поставив мої проксі через вікна: налаштування , але ці проксі не поширюються по на мій контейнери stackoverflow.com/questions/48272933 / ...
amique

Для мене мені потрібно було лише помістити свій DNS-сервер, і він працював тоді. Дякую.
richin

32

У Ubuntu потрібно встановити http_proxy для демона Docker, а не для клієнтського процесу. Це робиться в /etc/default/docker(див. Тут ).


там написано, що я не маю дозволу на доступ до вашої групи. У посиланні.
Азізбро

Я не думаю, що це працює для Ubuntu 18.04 і вище.
zslim

27

Щоб поширити відповідь Аруна , щоб працювати в CentOS 7, мені довелося видалити команди "експорту". Тож редагуйте

/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

Джерело цього блогу .


2
Потрібно лише HTTP_PROXY (тестується на Fedora 20).
sheldonh

Ідеально підходить для Suse 12!
Дін Мехін

14

Чому локально пов'язаний проксі не працює

Проблема

Якщо ви користуєтесь локально пов'язаним проксі - сервером, наприклад, прослуховуванням 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:

  1. Зробіть проксі-сервер прослуховувати 0.0.0.0замість цього127.0.0.1 . Увага: вам потрібна належна конфігурація брандмауера, щоб запобігти зловмисному доступу до нього.

  2. Додайте псевдонім із зворотним зв'язком до lo0інтерфейсу, наприклад10.200.10.1/24 :

    sudo ifconfig lo0 alias 10.200.10.1/24
    
  3. Встановіть 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
  ...

Зауважте: встановлений псевдонім циклуifconfigне зберігається після перезавантаження. Зробити його стійким - інша тема. Перевірте цю публікацію в блозі японською мовою (Google Translate може допомогти).


Дякую за це, я останній рік намагався знайти рішення, щоб отримати SquidMan на Mac під час спроби отримати доступ як до роботи, так і до зовнішньої мережі через проксі-сервер компанії. Я отримав це, щоб приклеїти його, підключивши його до запуску для налаштування при запуску. developer.apple.com/library/content/documentation/MacOSX/…
Proctor

Спасибі чоловік. Я нарешті знайшов вашу посаду! Це працює. Якщо ви використовуєте cntlm, не забудьте додати в свою конфігурацію обов'язковість 0.0.0.0. наприклад Прослухайте 0,0.0.0: 8989
Фелікс

Я теж використовую cntlm, і переходжу його на режим шлюзу
Лі Гері

10

Це виправлення, яке працювало для мене: Ubuntu, версія Docker: 1.6.2

У файл /etc/default/dockerдодайте рядок:

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

Перезавантажте Докер

sudo service docker restart

Робота над Docker v1.12.1 на Ubuntu 14.04 та Mint 17.3
wmarbut

1
Працює для 14.04.4 + Docker версії 17.03.1-ce, build c6d412e
okwap

8

Щоб налаштувати Docker на роботу з проксі, вам потрібно додати змінну середовища HTTPS_PROXY / HTTP_PROXY до файлу Docker sysconfig ( /etc/sysconfig/docker).

Залежно від того, використовуєте ви init.dчи інструмент служб, вам потрібно додати операцію "експортувати" (завдяки журналам звітів про помилку 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, для мосту аутентифікації. Цей пост у блозі пояснює це докладно .


5

У новій версії Docker, докер-двигуна , в системному дистрибутиві слід додати рядок змінної середовища до /lib/systemd/system/docker.service , як це зазначають інші:

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

Це було потрібно для RHEL7.
dbalakirev

додайте рядок до розділу [Служба]
volkit

5

Після встановлення Docker виконайте наступне:

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

Потім ви можете потягнути або зробити що завгодно:

mdesales@pppdc9prd1vq ~]$ 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)

3

Оскільки мені поки що не дозволяють коментувати:

Для CentOS 7 мені потрібно було активувати EnvironmentFile в "docker.service", як описано тут: Керування та налаштування Docker за допомогою systemd .

Редагувати: Я додаю своє рішення, як заявляв Нілеш. Мені потрібно було відкрити "/etc/systemd/system/docker.service", і мені довелося додати в розділі

[Сервіс]

EnvironmentFile = - / etc / sysconfig / docker

Лише тоді файл "etc / sysconfig / docker" завантажувався в мою систему.


3

Щоб вирішити проблему з завитком у збірці 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

Потім я перезапустив Докер sudo /etc/init.d/docker restart.


3

Якщо ви використовуєте procks socks5, ось мій тест з Docker 17.03.1-ce з налаштуванням "all_proxy", і він працював:

# Set up socks5 proxy server
ssh sshUser@proxyServer -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

3

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

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

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

Там ви можете налаштувати проксі-адресу, порт, ім’я користувача та пароль.

У такому форматі:

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

Приклад:

"geronimous:mypassword@192.168.44.55:8080"

Нічого більше, ніж це.


2

Просто встановлення змінних середовищ проксі не допомогло мені у версії 1.0.1 ... Мені довелося оновити /etc/default/docker.ioфайл із правильним значенням для змінної "http_proxy".


2

Якщо ви перебуваєте в Ubuntu, виконайте ці команди, щоб додати проксі.

sudo nano /etc/default/docker

І коментуйте рядки, які вказує

#export http_proxy = http://username:password@10.0.1.150:8050

І замініть його на відповідний проксі-сервер та ім’я користувача.

Потім перезапустіть Docker за допомогою:

service docker restart

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

docker search ubuntu

2

Можливо, вам потрібно встановити невеликі змінні. У моєму випадку мій /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>/"

Удачі! :)


2

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

$ sudo vim /etc/systemd/system/docker.service.d/http_proxy.conf
[Service]
Environment="HTTP_PROXY=http://username:password@IP: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

1

Якщо ви перебуваєте на Ubuntu, вам слід виконати цю команду:

export https_proxy=http://your_name:password@ip_proxy:port docker 

І перезавантажте Docker за допомогою:

service docker.io restart

Або піти /etc/docker.ioз нано ...


1

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

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

і потім

service docker restart

0

На RHEL6.6 працює лише це (зверніть увагу на використання export):

/ etc / sysconfig / docker

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

ПРИМІТКА. Обидва можуть використовувати http протокол.)

Завдяки https://crondev.com/running-docker-behind-proxy/


0

У моїй мережі Ubuntu працює за корпоративним проксі-сервером ISA. І для цього потрібна автентифікація. Я спробував усі згадані вище рішення, і нічого не допомогло. Що насправді допомогло - написати проксі-рядку у файл /etc/systemd/system/docker.service.d/https-proxy.confбез доменного імені.

Замість

Environment="HTTP_PROXY=http://user@domain:password@proxy:8080"

або

Environment="HTTP_PROXY=http://domain\user:password@proxy:8080"

та деякі інші заміни, такі як я @ -> %40або \ -> \\я намагався використовувати

Environment="HTTP_PROXY=http://user:password@proxy:8080"

І це працює зараз.



0

Це не точно відповідає на питання, але може допомогти, особливо якщо ви не хочете мати справу з сервісними файлами.

Якщо ви хостите зображення, один із способів - це конвертувати зображення у вигляді архіву дьогтю, використовуючи щось подібне на сервері .

docker save <image-name> --output <archive-name>.tar

Просто завантажте архів і поверніть його в зображення.

docker load <archive-name>.tar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.