Wie kann ich alle Docker-Container meinen Proxy verwenden lassen?

18

Ich betreibe Docker auf Debian Jessie, das sich hinter einem Unternehmensproxy befindet. Um Docker-Bilder herunterladen zu können, muss ich Folgendes zu meinen hinzufügen/etc/defaults/docker

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

Ich kann bestätigen, dass dies funktioniert.

Um jedoch von meinem Container aus auf das Interweb zugreifen zu können, muss ich alle Sitzungen mit --net hostdiesen env-Variablen starten und sie dann einrichten:

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

Idealerweise möchte ich, dass der Container das Host-Netzwerk nicht benötigt und nichts über den Proxy weiß (dh alle ausgehenden Anrufe an Port 20, 80, 443 im Container erfolgen über den Proxy-Port des Hosts). Ist das möglich?

Ist es ansonsten möglich, eine Site einzurichten, die sicherstellt, dass diese Umgebungsvariablen lokal festgelegt, aber nie als Teil eines Images exportiert werden?

UPDATE : Ich weiß, dass ich diese Dinge mit --env http_proxy=...etc weitergeben kann, aber das ist klobig. Ich möchte, dass es für alle Benutzer auf dem System funktioniert, ohne dass Aliase verwendet werden müssen.

fommil
quelle

Antworten:

5

Siehe diese SO Antwort :

Auf dem Hostserver wird ein Container ausgeführt, auf dem ein Proxy (in diesem Fall Squid) ausgeführt wird, der transparentes Proxying ausführen kann. Dieser Container verfügt über einige Iptables-Regeln, nach denen NAT-Daten an den Proxyserver gesendet werden. Dies bedeutet, dass der Container im privilegierten Modus ausgeführt werden muss.

Der Host-Server enthält auch (und hier die Magie) IP-Routing-Tabelleneinträge, die den gesamten Datenverkehr von einem beliebigen Container über den Proxy-Container umleiten, außer dem Proxy, der für Port 80 bestimmt war.

Das letzte Bit bedeutet im Wesentlichen, dass für den Port 80-Verkehr die Route vom Container zum Rest der Welt über den Proxy-Container verläuft, wodurch NAT und ein transparenter Proxy möglich werden.

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

laktak
quelle
Dies funktioniert nicht für "https".
11.