Как я могу позволить всем моим докер-контейнерам использовать мой прокси?

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=...т.д., но это неуклюже. Я хочу, чтобы он работал для всех пользователей в системе без использования псевдонимов.

fommil
источник

Ответы:

5

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

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

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

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

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

laktak
источник
Это не будет работать для "https".
выступление