18

Я работаю в докере на Debian Jessie, который находится за корпоративным прокси. Чтобы иметь возможность загружать образы докеров, мне нужно добавить следующее в мой /etc/defaults/docker

http_proxy="http://localhost:3128/"

Я могу подтвердить, что это работает.

Однако для того, чтобы получить доступ к interwebz из моего контейнера, мне нужно запустить все сеансы с --net host а затем настроить эти переменные env:

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}

В идеале, я бы хотел, чтобы контейнер не нуждался в сети хоста и не знал о прокси (т.е. все исходящие вызовы на порт 20, 80, 443 в контейнере проходят через порт прокси хоста). Это возможно?

Если это не удастся, возможно ли создать сайт, который будет гарантировать, что эти переменные env устанавливаются локально, но никогда не экспортируются как часть изображения?

ОБНОВЛЕНИЕ: я знаю, что могу передать эти вещи с --env http_proxy=... т.д., Но это неуклюже. Я хочу, чтобы он работал для всех пользователей в системе без использования псевдонимов.

1 ответ1

5

Смотрите этот так ответ:

Хост-сервер запускает контейнер с прокси-сервером (в данном случае squid), который может выполнять прозрачное проксирование. В этом контейнере есть некоторые правила iptables, что NAT-трафик на прокси-сервер - это означает, что контейнер должен работать в привилегированном режиме.

Хост-сервер также содержит (и это волшебство) записи таблицы маршрутизации ip, которые перенаправляют весь трафик из любого контейнера, кроме прокси, который был предназначен для порта 80, через контейнер прокси.

Последний бит по сути означает, что для трафика порта 80 маршрут от контейнера до остального мира проходит через прокси-контейнер, что дает ему возможность NAT и прозрачного прокси.

https://github.com/silarsis/docker-proxy

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .