докер не может использовать системный прокси

Я пытаюсь использовать докер за корпоративным брандмауэром.

введите здесь описание изображения

Я хотел бы заставить докер использовать системный прокси, но эта опция недоступна. Как я могу сделать докер для системного прокси.

введите здесь описание изображения


person wasabi    schedule 06.10.2017    source источник
comment
с меньшими знаниями о докере, используете ли вы какой-либо интерфейс командной строки? тогда у меня есть решение   -  person venkata krishnan    schedule 06.10.2017
comment
Да, я использую PowerShell в Windows.   -  person wasabi    schedule 06.10.2017


Ответы (3)


Я написал сообщение в блоге об использовании странного виртуального коммутатора DummyDesperatePoitras в качестве якоря для CNTLM, и это решает некоторые проблемы, о которых я упоминал здесь (помимо прочего, необходимость менять прокси-адрес для Docker каждый раз, когда ваш IP-адрес меняется):

http://mandie.net/2017/12/10/docker-for-windows-behind-a-corporate-web-proxy-tips-and-tricks/

По состоянию на ноябрь 2017 года эта функция все еще не была реализована в Docker для Windows: https://github.com/docker/for-win/issues/589

Лучшее решение, которое я нашел, это CNTLM, но я не в восторге от него, потому что:

1) CNTLM не обновлялся 5 лет

2) Вы должны установить IP-адрес прокси-сервера в графическом интерфейсе Docker, что делает его довольно устойчивым к автоматизации. Графический интерфейс Docker для Windows считывает параметры прокси-сервера с виртуальной машины MobyLinux, а не из реестра Windows, файла конфигурации или переменных среды Windows. Установка HTTP_PROXY и HTTPS_PROXY в Windows абсолютно не влияет на Docker. Я не нашел способа программно установить значение прокси; виртуальная машина MobyLinux не принимает соединения ssh. Если кто-нибудь когда-нибудь найдет способ сделать это из командной строки или сценария, я бы хотел знать.

3) Установка IP-адреса прокси-сервера на 127.0.0.1 не будет работать, потому что это заставит виртуальную машину, на которой Docker на самом деле работает, попробовать свой собственный интерфейс, а не тот, который находится на хост-компьютере с CNTLM. . Я также пробовал IP-адрес интерфейса DockerNAT, 10.0.75.1, но безуспешно.

4) Это означает, что IP-адрес прокси-сервера должен быть текущим IP-адресом вашего активного внешнего сетевого интерфейса. Если вы много перемещаетесь по зданиям, вам нужно проверять это каждый раз, когда вы хотите использовать Docker.

  • Настройте CNTLM для прослушивания 0.0.0.0 3128, а не только 3128 или 127.0.0.1 3128. Это избавит вас от необходимости обновлять этот IP-адрес каждый раз, когда ваш компьютер получает новый IP-адрес. Просто наличие номера порта предотвратит «услышание» трафика от виртуальной машины, на которой работает Docker.
  • Рассчитайте хэш NTLMv2 и сохраните его в файле конфигурации вместо имени пользователя и пароля. Это будет отличаться для каждого ПК и учетной записи пользователя, поэтому не делитесь своим неотредактированным файлом конфигурации с другим ПК, если вы не хотите, чтобы вас заблокировали. Вам нужно будет обновить этот сохраненный хэш при следующей смене пароля Windows.
  • Перезапустите службу cntlm Windows после любых изменений в ее конфигурационном файле.
  • Запустите ipconfig в cmd.exe или PowerShell, чтобы узнать свой текущий IP-адрес. Если вы используете корпоративную VPN, используйте IP-адрес адаптера WiFi или Ethernet, а не VPN.
  • Введите http://ipfromipconfig:3128/ в поле "Веб-сервер (HTTP)". Убедитесь, что установлен флажок «Использовать одинаково для обоих».
person Amanda Debler    schedule 14.11.2017

Использование CNTLM автоматизирует работу за прокси. Это позволяет нам везде указывать IP-адрес без каких-либо учетных данных, поэтому безопасность лучше, и всякий раз, когда мы меняем пароль, нам нужно делать это только в одном месте, мы также можем указать URL-адреса, которые не должны передаваться через прокси. Начиная с версии Docker 18.03 доступно специальное DNS-имя: host.docker.internal. Это позволяет подключаться к хост-машине из контейнеров Docker. Теперь, когда мы настраиваем наш прокси-сервер CNTLM в cntlm.ini, чтобы он прослушивал 0.0.0.0:3128:

Listen 0.0.0.0:3128

Затем мы можем указать в настройках Docker прокси, используя адрес host.docker.internal:3128, который будет преобразован в соответствующий и текущий локальный адрес нашей машины.

person baawhee    schedule 04.03.2020
comment
Этот ответ работает в 2020 году. Я считаю, что принятый ответ больше не является жизнеспособным, основываясь на комментарии автора к ее собственному сообщению здесь: stackoverflow.com/questions/46669115/ - person EnE_; 27.08.2020
comment
Имея в виду, что я в среде NATLMv2. -› Этот ответ помог, но мне пришлось указать CNTLM на другой порт (0.0.0.0:53128), потому что в противном случае служба CNTLM не запустилась бы. После этого я также добавил настройки прокси в графический интерфейс Docker с myusername:[email protected] .win.localhost:53128 Также пароль, содержащий специальные символы, такие как # , ! , ? иногда вызывает головную боль мэра из-за кодирования URL. - person Dominik Sand; 17.09.2020

вы можете настроить две переменные среды http_proxy и https_proxy

http_proxy со значением http://username:password@proxyIp:proxyport

например, в моем случае это было http://venkat_krish:[email protected]:80

вы можете использовать то же самое для https-прокси

Примечание:

Если у вас есть какие-либо специальные символы, кроме _ & . в имени пользователя или пароле вы должны закодировать URL. перейдите по этой ссылке для кодировки URL-адреса https://grox.net/utils/encoding.html

Например, если ваш пароль abc@123, то он будет записан как abc%40123.

person venkata krishnan    schedule 06.10.2017
comment
Достаточно ли добавить переменные среды, должен ли я выполнять какие-либо настройки в докере? - person wasabi; 06.10.2017
comment
если вы установите переменные среды, он предоставит доступ в Интернет через командную строку за прокси-сервером. поэтому нет необходимости в дополнительной настройке в докере. я использовал то же самое для диспетчера пакетов узла (npm), который отлично работает для меня. - person venkata krishnan; 06.10.2017
comment
Я добавил HTTP_PROXY и HTTPS_PROXY в качестве переменных среды, но произошла та же ошибка. - person wasabi; 06.10.2017
comment
Вы можете проверить, можете ли вы прочитать их в своей оболочке? как команда эха echo %http_proxy% - person venkata krishnan; 06.10.2017
comment
zerrouki.com/working-behind-a-proxy вы пробовали это? ссылка на сайт? - person venkata krishnan; 06.10.2017
comment
gallery.technet.microsoft.com/scriptcenter/ этот поможет тебе, я думаю - person venkata krishnan; 06.10.2017
comment
zerrouki.com/working-behind-a-proxy Я следовал этому руководству, но ничего не изменилось. В другом учебнике Set-InternetProxt не распознается как допустимый командлет. - person wasabi; 06.10.2017