Как разрешить всем моим Docker-контейнерам использовать мой прокси-сервер?

Как разрешить всем моим Docker-контейнерам использовать мой прокси-сервер?

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

решение1

См. этот ответ SO:

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

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

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

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

решение2

TheНастройте Docker-клиентофициальная документация показывает, как легко решить эту проблему.

Отредактируйте файл ~/.docker/config.json(или %USERPROFILE%\.docker\config.json) и добавьте следующий фрагмент JSON:

{
    "proxies": {
        "default": {
            "httpProxy": "http://localhost:3128",
            "httpsProxy": "https://localhost:3128"
        }
    }
}

Это решило мою проблему, когда запуск apt udpateвнутри контейнера docker debian не удавался. После добавления настроек прокси в этот файл json и запуска нового контейнера docker apt updateвсе заработало.

Связанный контент