Jak mogę pozwolić wszystkim kontenerom dokerów korzystać z mojego proxy?

18

Używam dokera na Debian Jessie, który stoi za korporacyjnym proxy. Aby móc pobrać obrazy dokerów, muszę dodać następujące elementy do mojego/etc/defaults/docker

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

Mogę potwierdzić, że to działa.

Aby jednak uzyskać dostęp do interwebz z poziomu mojego kontenera, muszę rozpocząć wszystkie sesje, --net hosta następnie skonfigurować te zmienne env:

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

Idealnie byłoby, gdyby kontener nie potrzebował sieci hosta i nie wiedział o proxy (tzn. Wszystkie połączenia wychodzące do portu 20, 80, 443 w kontenerze przechodzą przez port proxy hosta). Czy to jest możliwe?

W przeciwnym razie, czy możliwe jest skonfigurowanie strony, która zapewni, że te zmienne env są ustawione lokalnie, ale nigdy nie są eksportowane jako część obrazu?

AKTUALIZACJA : Wiem, że mogę przekazać te rzeczy za pomocą --env http_proxy=...itp., Ale to jest niezręczne. Chcę, aby działał dla wszystkich użytkowników w systemie bez konieczności używania aliasów.

Fommil
źródło

Odpowiedzi:

5

Zobacz tę odpowiedź SO :

Serwer hosta obsługuje kontener z serwerem proxy (w tym przypadku squid), który może wykonywać przezroczyste proxy. Ten kontener ma pewne reguły iptables, które translują NAT do serwera proxy - oznacza to, że kontener musi działać w trybie uprzywilejowanym.

Serwer hosta zawiera także (i oto magię) wpisy tabeli tras ip, które przekierowują cały ruch z dowolnego kontenera oprócz serwera proxy, który był przeznaczony dla portu 80, przez kontener proxy.

Ten ostatni bit zasadniczo oznacza, że ​​w przypadku ruchu na porcie 80 trasa z kontenera do reszty świata przechodzi przez kontener proxy - dając mu szansę na NAT i przezroczysty serwer proxy.

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

laktak
źródło
To nie zadziała w przypadku „https”.
ceving