W zwykłym kontenerze w sieci bridge 127.0.0.1 to loopback samego kontenera. Proxy nasłuchujące na localhost laptopa nie nasłuchuje automatycznie w każdym kontenerze.

To wyjaśnia częsty rozdźwięk: ten sam URL proxy działa w terminalu hosta, ale w kontenerze daje odmowę połączenia. Adres wskazuje w każdym miejscu inny punkt sieciowy.

Publicznego proxy można użyć bezpośrednio

Jeżeli punkt z usługi lub listy proxy HTTP jest faktycznie osiągalnym publicznym IP, przekaż ten adres aplikacji, zamiast zamieniać go na localhost:

docker run --rm \
  -e HTTP_PROXY=http://203.0.113.10:8080 \
  -e HTTPS_PROXY=http://203.0.113.10:8080 \
  your-image

Zastąp adres dokumentacyjny i obraz. Program w obrazie nadal musi obsługiwać te zmienne środowiskowe; Docker nie zamienia każdego gniazda w żądanie proxy tylko dlatego, że zmienne istnieją.

Jeżeli proxy działa na hoście Dockera

Docker Desktop udostępnia host.docker.internal do dostępu do wewnętrznego adresu hosta. W obsługiwanej natywnej konfiguracji Engine mapowanie hosta może dostarczyć tę zwyczajową nazwę:

docker run --rm \
  --add-host host.docker.internal=host-gateway \
  -e HTTP_PROXY=http://host.docker.internal:8080 \
  -e HTTPS_PROXY=http://host.docker.internal:8080 \
  your-image

To zmienia rozwiązywanie nazw, nie jest poleceniem przekazywania portu. W natywnym Linuksie usługa związana tylko z loopbackiem hosta może nadal być nieosiągalna przez jego adres bridge. Nasłuch, zapora i trasa kontenera muszą zezwolić na połączenie. Zmieniając nasłuch, ogranicz go do potrzebnych klientów zamiast tworzyć otwarte proxy bez uwierzytelniania.

Testuj z tego samego miejsca co aplikacja

Wynik curl na hoście sprawdza tylko trasę hosta. Wyślij właściwe żądanie z kontenera i sprawdź, czy dociera do zamierzonego punktu.

„Host” to także maszyna z uruchomionym Docker Engine. Przy zdalnym Engine nie musi to być laptop. Loopback IP skopiowane z lokalnej aplikacji ma więc szczególnie małe szanse działać bez zmian na zdalnym builderze lub serwerze.

Oddziel problemy pobierania obrazu: daemon pobiera obraz, zanim aplikacja może użyć powyższego środowiska.

Powiązane artykuły