Warum ein lokal gebundener Proxy nicht funktioniert
Das Problem
Wenn Sie einen lokal gebundenen Proxy verwenden, z.B. der auf 127.0.0.1:8989
hört, funktioniert er NICHT in Docker für Mac. Laut der Docker-Dokumentation:
Ich möchte von einem Container aus mit einem Dienst auf dem Host verbinden
Der Mac hat eine sich ändernde IP-Adresse (oder keine, wenn Sie keinen Netzwerkzugriff haben). Unsere derzeitige Empfehlung ist, eine ungenutzte IP an die lo0
-Schnittstelle auf dem Mac anzuschließen. Zum Beispiel: sudo ifconfig lo0 alias 10.200.10.1/24
und stellen Sie sicher, dass Ihr Dienst auf dieser Adresse oder 0.0.0.0
(d.h. nicht 127.0.0.1
) hört. Dann können Container eine Verbindung zu dieser Adresse herstellen.
Gleiches gilt für die Docker-Serverseite. (Um die Serverseite und die Clientseite von Docker zu verstehen, versuchen Sie, docker version
auszuführen.) Und die Serverseite läuft auf einer Virtualisierungsebene, die ihr eigenes localhost
hat. Daher wird keine Verbindung zum Proxy-Server auf dem localhost
des Host-Betriebssystems hergestellt.
Die Lösung
Wenn Sie also einen lokal gebundenen Proxy wie ich verwenden, müssen Sie im Wesentlichen die folgenden Dinge tun, um ihn mit Docker für Mac zum Laufen zu bringen:
-
Lassen Sie Ihren Proxy-Server auf 0.0.0.0
anstatt auf 127.0.0.1
hören. Vorsicht: Sie benötigen eine angemessene Firewall-Konfiguration, um einen böswilligen Zugriff zu verhindern.
-
Fügen Sie der lo0
-Schnittstelle eine Loopback-Alias hinzu, z.B. 10.200.10.1/24
:
sudo ifconfig lo0 alias 10.200.10.1/24
-
Setzen Sie den HTTP- und/oder HTTPS-Proxy auf 10.200.10.1:8989
in den Einstellungen im Docker-Tray-Menü (vorausgesetzt, dass der Proxy-Server auf dem Port 8989
hört).
Überprüfen Sie anschließend die Proxy-Einstellungen, indem Sie einen Befehl in einem neuen Container ausführen, der aus einem nicht heruntergeladenen Image erstellt wurde:
$ docker rmi -f hello-world
...
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
...
Hinweis: Der durch ifconfig
gesetzte Loopback-Alias bleibt nach einem Neustart nicht erhalten. Um ihn dauerhaft zu machen, ist ein anderes Thema. Bitte lesen Sie diesen Blog-Beitrag auf Japanisch (Google Translate kann helfen): diesen Blog-Beitrag.