Настройте Docker с прокси на хост / URL - PullRequest
0 голосов
/ 15 марта 2019

Я использую Docker Toolbox на Windows 7 в корпоративной среде.Мой рабочий процесс требует извлечения контейнеров из одного артефакта и переноса их в другой (например, внешний и внутренний).Каждому артефакту необходим отдельный прокси для доступа к нему.Есть ли способ настроить демон Docker для выбора прокси на основе URL?Или, если нет, что еще я могу сделать, чтобы заставить эту работу?

1 Ответ

0 голосов
/ 20 марта 2019

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

В то время как любой HTTP [S] прокси, способный к выбору восходящего потока, подойдет, ( pac4cli проект особенно интересен тем, что рекламируется возможность выбора восходящего потока на основе proxy-auto-discovery протокол, используемый большинством веб-браузеров (в корпоративных условиях), я решил использовать tinyproxy , как более зрелое и легкое решение.Кроме того, я решил запустить свой прокси-сервер внутри виртуальной машины docker-machine, чтобы упростить его развертывание и убедиться, что прокси-сервер всегда работает, когда это нужно демону Docker.

Ниже приведены шаги, которые я использовал длянастроить мою систему.Я особенно благодарен Феникс за предоставление шагов для настройки Docker Toolbox на Windows за корпоративным прокси-сервером и буду сильно заимствовать из этого ответа.

Из этогоВ этом случае я приму Docker Quickstart Terminal или GitBash , с докером в PATH, в качестве консоли командной строки, а "username" - это ваше имя пользователя Windows.

Шаг 1: Сборка tinyproxy на целевой платформе

Начните с извлечения чистого дистрибутива Linux, я использовал CentOS и запустил bash внутри него:

docker run -it --name=centos centos bash

Далее установите необходимые инструменты:

yum install -y make gcc

После этого мы извлекаем последний выпуск Tinyproxy из его репозитория GitHub и извлекаем его из дома rootкаталог (на момент написания этой статьи последний выпуск был 1.10.0):

cd
curl -L https://github.com/tinyproxy/tinyproxy/releases/download/1.10.0/tinyproxy-1.10.0.tar.gz \
    | tar -xz
cd tinyproxy-1.10.0

Теперь давайте настроим и создадим его:

./configure --enable-upstream \
    --disable-filter\
    --disable-reverse\
    --disable-transparent\
    --disable-xtinyproxy
make

В то время как --enable-upstream явно требуется,отключение других функций по умолчанию не является обязательным, но Gooбуду практиковаться.Чтобы убедиться, что он действительно работает, запустите:

./src/tinyproxy -h

Вы должны увидеть что-то вроде:

Usage: tinyproxy [options]

Options are:
  -d        Do not daemonize (run in foreground).
  -c FILE   Use an alternate configuration file.
  -h        Display this usage information.
  -v        Display version information.

Features compiled in:
    Upstream proxy support

For support and bug reporting instructions, please visit
<https://tinyproxy.github.io/>.

Мы выходим из контейнера, нажимая Ctrl + D и скопируйте исполняемый файл в специальную папку, доступную с docker-machine VM:

docker cp centos://root/tinyproxy-1.10.0/src/tinyproxy \
    /c/Users/username/tinyproxy

Замените «username» на свое имя пользователя Windows.Обратите внимание, что для отключения преобразования пути MINGW требуется двойная косая черта - // перед «root».

Теперь мы можем удалить контейнер:

docker rm centos

Шаг 2: Направьте демон docker налокальный порт прокси

Выберите номер порта TCP для запуска прокси.Это может быть любой порт, который не используется на виртуальной машине docker-machine.В этом примере я буду использовать номер 8618.

Во-первых, давайте удалим существующую виртуальную машину Docker по умолчанию:
ПРЕДУПРЕЖДЕНИЕ: Это навсегда удалит все сохраненные в данный момент контейнеры и изображения

docker-machine rm -f default

Затем мы воссоздаем переменные окружения компьютера по умолчанию HTTP_PROXY и HTTPS_PROXY для локального хоста и выбранного порта, а затем обновляем нашу оболочку:

docker-machine create default \
    --engine-env HTTP_PROXY=http://localhost:8618 \
    --engine-env HTTPS_PROXY=http://localhost:8618
eval $(docker-machine env)

При желании мы также можем установить переменную окружения NO_PROXY, чтобы перечислять хосты и / или подстановочные знаки (разделенные ;), к которым демон должен подключаться напрямую, в обход прокси.

Шаг 3: Настроить tinyproxy inside docker-machine VM

Сначала мы создадим два файла в каталоге /c/Users/username (именно здесь должен находиться наш tinyproxy бинарный файл после шага 1 выше), а затем мыскопирую их в виртуальную машину.

Первый файл - tinyproxy.conf, точный синтаксис задокументирован на веб-сайте Tinyproxy, но в приведенном ниже примере должны быть указаны все необходимые настройки:

# These settings can be customized to your liking,
# the port though must be the same we used in Step 2

listen 127.0.0.1
port 8618

user nobody
group nogroup
loglevel critical
syslog on

maxclients 50
startservers 2
minspareServers 2
maxspareServers 5

disableviaheader yes

# Here is the actual proxy selection, rules apply from top
# to bottom, and the last one is the default. More info on:
# https://tinyproxy.github.io/

upstream http proxy1.corp.example.com:80 ".foo.example.com"
upstream http proxy2.corp.example.com:80 ".bar.example.com"
upstream http proxy.corp.example.com:82

Впример выше:

также возможно сопоставить точные имена хостов, IP-адреса, подсети и хосты без доменов.

Второй файл представляет собой сценарий оболочки, который запускает прокси, его имя должно быть bootlocal.sh:

#! /bin/sh

# Terminate on error
set -e

# Switch to the script directory
cd $(dirname $0)

# Launch proxy server
./tinyproxy -c tinyproxy.conf

Теперь давайте подключимся к виртуальной машине докера, получим root и перейдем к boot2dockerкаталог:

docker-machine ssh
sudo -s
cd /var/lib/boot2docker

Далее мы скопируем все три файла и зададим их разрешения:

cp /c/Users/username/boot2docker/{tinyproxy{,.conf},bootlocal.sh} .
chmod 755 tinyproxy bootlocal.sh
chmod 644 tinyproxy.conf

Выйдите из сеанса VM, нажав Ctrl + D дважды и перезапустите его:

docker-machine restart default

Вот и все!Теперь docker должен иметь возможность извлекать изображения из разных URL-адресов, автоматически выбирая правильный прокси-сервер.

...