Подтвердить что ты не робот

Как установить прокси-сервер в докере?

Я только что установил docker toolbox на windows environmentnement (Windows 7 Pro), и у меня есть сетевое время из-за прокси-сервера entreprise. Как установить прокси-сервер в панели инструментов docker?

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Я столкнулся с той же проблемой. Вот мое решение.

Env:

Win7, Docker Toolbox 17.03, серверный терминал, за настройками прокси-сервера предприятия.

Решение:

в C:\Program Files\Docker Toolbox, найдите файл start.sh. добавьте следующие два параметра прокси-сервера:

export http_proxy="http://hostname:port/"
export https_proxy="http://hostname:port/"

По крайней мере, это работает для меня.

Ответ 2

У меня похожая проблема для Windows 7, но она была решена с помощью этих шагов:

  • Шаг 1. Создайте пакетный скрипт C:\Program Files\Docker Toolbox\kitematic_proxy.cmd со следующей конфигурацией

    set proxy=YOUR_PROXY
    SET HTTP_PROXY=%proxy%
    SET HTTPS_PROXY=%proxy% 
    for /f %%i in ('docker-machine.exe ip default') do set DOCKER_HOST=%%i
    SET NO_PROXY=%DOCKER_HOST%
    set DOCKER_HOST=tcp://%DOCKER_HOST%:2376
    cd Kitematic
    Kitematic.exe
    
  • Шаг 2. Откройте Oracle Virtual machine из меню "Пуск", перейдите в командную строку, нажав " Показать" (Убедитесь, что Oracle Vm запущен и работает)

enter image description here

введите sudo vi/var/lib/boot2docker/profile

добавить эти строки

export HTTP_PROXY=http://your.proxy.name:8080
export HTTPS_PROXY=http://your.proxy.name:8080

используйте свой прокси-адрес и порт

эта ссылка мне очень помогает https://github.com/docker/kitematic/wiki/Common-Proxy-Issues-&-Fixes

Замечания:

  1. Не забудьте добавить 192.168.99.100 ip в список исключений настроек прокси (используйте inetcpl.cpl)
  2. Не забудьте добавить HTTP_PROXY и HTTPS_PROXY в пользовательскую переменную (Advance settings-> Переменные среды)
  3. Не забудьте перезагрузить компьютер

Ответ 3

Установка docker на windows 7 (docker 18.09.0) за корпоративным прокси была для меня довольно сложной. Вот шаги, за которыми я следовал:

  1. установить переменную HTTP_PROXY в вашей среде Windows (HTTP_PROXY = http://your_proxy: порт)
  2. установите панель инструментов docker с помощью установщика или запустите в powershell от имени администратора: choco install docker-toolbox (Внимание! Не используйте Docker для Windows, так как он предназначен для Windows 10)
  3. убедитесь, что у вас нет предыдущих виртуальных docker-machine ls созданных вашими предыдущими попытками (docker-machine ls должен быть пуст. Если не запущен: docker-machine rm default)
  4. запустите в powershell от имени пользователя: docker-machine --native-ssh create -d virtualbox --engine-env HTTP_PROXY=$HTTP_PROXY --engine-env HTTPS_PROXY=$HTTPS_PROXY default.
  5. запустите C:\Program Files\Docker Toolbox\start.sh
  6. Теперь запустите docker pull busybox. Это должно работать.

Ответ 4

Ах! На самом деле, с помощью Docker Toolbox, окна - это очень тонкий слой над созданной виртуальной машиной, поэтому мой метод заключается в том, чтобы настроить саму виртуальную машину, чтобы все работало. Так.

0) Установите глобальные переменные среды на хост-компьютере Windows

HTTP_PROXY = "http://login:[email protected]:8080"
HTTPS_PROXY = "http://login:[email protected]:8080"

Обратите внимание на заглавные буквы! (также вы можете установить FTP_PROXY и NO_PROXY)

1) Запустите Docker Quickstart Terminal, он создаст виртуальную машину с именем default под вашим именем VirtualBox или чем-то еще. Также он будет отображать адрес вашей только что созданной виртуальной машины как

docker is configured to use the default machine with IP 192.168.99.104

2) SSH по этому адресу (т.е. с PuTTY). Логин: docker Пароль: tcuser

3) Беги

echo '
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://login:[email protected]:8080",
     "httpsProxy": "http://login:[email protected]:8080"
   }
 }
}' > /home/docker/.docker/config.json

Это заставит клиент Docker (на ВМ!) Запускать контейнеры с правильными envs внутри.

4) Теперь вы можете использовать докер-клиент внутри виртуальной машины. Чтобы заставить клиент Docker Windows (а также Docker-compose) также устанавливать правильные envs внутри работающих контейнеров, поместите тот же config.json что и на стр .3 на хост-компьютере Windows, в config.json C:\User\<yourhomedir>\.docker,

Теперь проверьте среду внутри работающего контейнера

docker run -ti ubuntu env

HTTPS_PROXY=http://login:[email protected]:8080
https_proxy=http://login:[email protected]:8080
HTTP_PROXY=http://login:[email protected]:8080
http_proxy=http://login:[email protected]:8080

Обратите внимание, что переменные CAPS и строчные буквы установлены правильно!

Окончательная проверка для всего в порядке:

docker run -ti ubuntu apt-get update

5) Одна из проблем, с которой вы можете столкнуться, заключается в том, что адрес вашего прокси-сервера получен из сети, которую докер использует при создании собственных сетей, поэтому он испортит маршрут к вашему прокси сразу после docker network create. Поэтому убедитесь, что адрес прокси не похож на 172.18.xx. В этом случае вынудите Docker использовать другое адресное пространство для созданных сетей, выполнив другую конфигурацию на ВМ.

sudo -i
echo '
{
  "default-address-pools": [
    {"base":"172.80.0.0/16","size":24}
  ]
}' > /etc/docker/daemon.json

Затем перезапустите dockerd /etc/init.d/docker restart

6) Не перезагружайте виртуальную машину, останавливайте ее при необходимости.

Ответ 5

У меня возникла проблема с установкой панели инструментов Windows 7 Docker

$ docker --version
Docker version 18.09.3, build 774a1f4eee

$ docker-compose --version
docker-compose version 1.23.2, build  1110ad01

Когда я пытался

docker run hello-world

я получил

Не удается найти образ 'hello-world: latest' локально C:\Program Files\Docker Toolbox\docker.exe: Ответ об ошибке от демона: Получить https://registry-1.docker.io/v2/: net/http: запрос отменен при ожидании соединения (Client.Timeout превышен при ожидании заголовков). Смотрите "C:\Program Files\Docker Toolbox\docker.exe run --help".

Согласно https://docs.docker.com/toolbox/faqs/troubleshoot/ я зарегистрировал свой корпоративный прокси-сервер в /var/lib/boot2docker/profile внутри докера:

  1. Используйте ssh для входа на виртуальную машину. В этом примере выполняется default компьютер по default.

    $ docker-machine ssh default
    [email protected]:~$ sudo vi /var/lib/boot2docker/profile
    

Затем я добавил свой корпоративный прокси в конце profile

export "HTTP_PROXY=http://host:port"
export "HTTPS_PROXY=http://host:port"

после этого я продолжил инструкции

  1. Добавьте параметр NO_PROXY в конец файла, как в примере ниже.

      export "NO_PROXY=192.168.*.*"
    
  2. Перезапустите Docker. После изменения profile на своей виртуальной машине перезапустите Docker и выйдите из машины.

      [email protected]:~$ sudo /etc/init.d/docker restart
      [email protected]:~$ exit
    

После docker run hello-world команда docker run hello-world работает хорошо

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

Конфигурация потеряна после перезагрузки ПК

Как упоминалось @rsb2097, после каждой перезагрузки ПК Docker Machine теряет настройки в /var/lib/boot2docker/profile. Я тоже сталкиваюсь с той же проблемой, и не знаю, как этого избежать, но я сделал скрипт для написания этих настроек проще.

Я думал, что это происходит потому, что я выключил ПК, не останавливая док-станцию (VirtualBox говорит, что при выключении есть активные соединения): предположил, что это повредит. Я попытался docker-machine stop но это не помогло.

В результате я написал скрипт AddDockerMachineProxy.cmd который записывает настройки прокси с использованием plink.exe из Putty (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html).

использование

  1. Перезагрузите компьютер.
  2. Запустите Docker Quickstart Terminal, у меня будет следующий вывод:

    Starting "default"...
    (default) Check network to re-create if needed...
    (default) Windows might ask for the permission to configure a dhcp server. 
    Sometimes, such confirmation window is minimized in the taskbar.
    (default) Waiting for an IP...
    Machine "default" was started.
    Waiting for SSH to be available...
    Detecting the provisioner...
    Started machines may have new IP addresses. 
    You may need to re-run the 'docker-machine env' command.
    Regenerate TLS machine certs?  
    Warning: this is irreversible. (y/n): Regenerating TLS certificates
    Waiting for SSH to be available...
    Detecting the provisioner...
    Copying certs to the local machine directory...
    Copying certs to the remote machine...
    Setting Docker configuration on the remote daemon...
    
  3. Запустите скрипт AddDockerMachineProxy.cmd (plink.exe должен быть в %PATH%):

    @echo off
    
    echo Was "Docker Quickstart Terminal" run after the reboot to init the machine?
    echo If not this script fails.
    pause
    
    set "exePlink=plink.exe"
    set "connectionString=-pw tcuser [email protected]"
    
    echo Profile BEFORE:
    call "%exePlink%" %connectionString% cat /var/lib/boot2docker/profile
    if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
    
    echo APPENDING PROXY
    call "%exePlink%" %connectionString% sudo bash -c "'echo export \"HTTP_PROXY=http://host:port\">> /var/lib/boot2docker/profile'"
    if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
    
    call "%exePlink%" %connectionString% sudo bash -c "'echo export \"HTTPS_PROXY=http://host:port\">> /var/lib/boot2docker/profile'"
    if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
    
    call "%exePlink%" %connectionString% sudo bash -c "'echo export \"NO_PROXY=192.168.*.*\">> /var/lib/boot2docker/profile'"
    if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
    
    echo Profile AFTER:
    call "%exePlink%" %connectionString% cat /var/lib/boot2docker/profile
    if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
    
    echo Restart docker service:
    call "%exePlink%" %connectionString% sudo /etc/init.d/docker restart
    if errorlevel 1 ( echo ERROR: PSCP failed !!! & goto BadExit )
    
    echo Testing connection
    call docker image pull hello-world || ( echo ERROR: docker image pull is failed !!! & goto BadExit )
    
    echo Done!
    exit /b 0
    
    :BadExit
    echo ERROR !!!
    exit /b 1