Wie kann ich allen meinen Docker-Containern die Verwendung meines Proxys ermöglichen?

Wie kann ich allen meinen Docker-Containern die Verwendung meines Proxys ermöglichen?

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

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

Ich kann bestätigen, dass das funktioniert.

Um jedoch von meinem Container aus auf das Internet zugreifen zu können, muss ich alle Sitzungen mit --net hostdiesen Umgebungsvariablen starten und diese dann einrichten:

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

Im Idealfall hätte ich es gern, wenn der Container das Host-Netzwerk nicht benötigt und nichts über den Proxy weiß (d. h. alle ausgehenden Anrufe an Port 20, 80, 443 im Container gehen über den Proxy-Port des Hosts). Ist das möglich?

Wenn dies nicht gelingt, ist es möglich, eine Site einzurichten, die sicherstellt, dass diese Umgebungsvariablen lokal festgelegt, aber nie als Teil eines Bildes exportiert werden?

AKTUALISIEREN: Ich weiß, dass ich diese Dinge mit etc. übergeben kann --env http_proxy=..., aber das ist umständlich. Ich möchte, dass es für alle Benutzer des Systems funktioniert, ohne dass ich Aliase verwenden muss.

Antwort1

Siehe diese SO-Antwort:

Auf dem Host-Server läuft ein Container mit einem Proxy (in diesem Fall Squid), der transparentes Proxying durchführen kann. Dieser Container verfügt über einige iptables-Regeln, die den Datenverkehr per NAT an den Proxy-Server weiterleiten. Dies bedeutet, dass der Container im privilegierten Modus ausgeführt werden muss.

Der Hostserver enthält außerdem (und hier liegt der Zauber) Einträge in der IP-Routentabelle, die den gesamten Datenverkehr von allen Containern außer dem Proxy, der für Port 80 bestimmt war, über den Proxy-Container umleiten.

Dieser letzte Teil bedeutet im Wesentlichen, dass für den Datenverkehr über Port 80 die Route vom Container zum Rest der Welt durch den Proxy-Container verläuft – und ihm so die Möglichkeit zum NAT und transparenten Proxy gegeben wird.

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

Antwort2

DerKonfigurieren des Docker-ClientsDie offizielle Dokumentation zeigt, wie dieses Problem einfach gelöst werden kann.

Bearbeiten Sie die ~/.docker/config.json(oder %USERPROFILE%\.docker\config.json) Datei und fügen Sie den folgenden JSON-Ausschnitt hinzu:

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

Dies löste mein Problem, bei dem die Ausführung apt udpatein einem Debian-Docker-Container fehlschlug. Nachdem ich die Proxy-Einstellungen in dieser JSON-Datei hinzugefügt und einen neuen Docker-Container gestartet hatte, apt updatefunktionierte es.

verwandte Informationen