Mam sobie kontener w dockerze na WSL2. Kontener musi się skomunikować z innym serwisem przez HTTP poza dockerem (jakiś spring odpalony na localhoscie) po innym porcie niż standardowe 80. Wybrałem np. 8080
No i kurcze komunikacji z wewnątrz kontenera brak. Curl pokazuje błąd nr 7. Używam host.docker.internal
do komunikacji. Nazwa jest rozwiązywana na 192.168.50.2, podsieć w Docker Desktop jest na 192.168.50.X. Ping działa. Po porcie 80 i 443 mam jakąś komunikację. Nmap na porcie 8080 pokazuje filtered
, na 80 open
.
Kontener jest na Linux Alpine i nie mam w nim żadnego ufw
. Od strony Windows firewall sprawdzony.
Nie jestem Linuxowcem więc może na tym Alpine jest jakiś inny Firewall? Znalazłem coś o awall
ale Linux nie rozpoznaje polecenia.
Co ominąłem jeszcze?
A curlem możesz strzelić do tej usługi z kontenera: https://docs.docker.com/desktop/mac/networking/#use-cases-and-workarounds ?
Nie. CURL error 7. Zarówno z samej linii komend jak i z PHPowego skryptu wykorzystującego CURLa.
Natomiast zobaczyłem w podesłanej dokumentacji jeden dns jakiego nie znałem. gateway.docker.intenal
Zobaczę co zwraca. Może jednak coś jest jeszcze nie tak z innymi ustawieniami.
Jeszcze takie pytanie, może głupie, port 8080 na hoscie masz otwarty na zaporze?
Żadne pytanie nie jest głupie. Na windzie tak. Kontrolnie nawet dla testu wyłączyłem zaporę całkowicie.
A weź całego powyłączaj tą usługę oraz docker i zobacz czy coś już nie słucha na tym 8080. Ewentualnie spróbuj zmienić ten port, bo 8080 jest dosyć popularny.
Trzeba się było odowołać do IP WSLa bezpośrednio w wsku wtedy jest ono z puli 172.29.X.X
Znalazłem taki kawałek skryptu, pomagający w diagnostyce na różnych systemach
local myIp='host.docker.internal'
case ${_PLATFORM} in
linux)
myIp=$(ip route get 1 | sed 's/^.*src \([^ ]*\).*$/\1/;q')
;;
macos)
myIp=$(ipconfig getifaddr en0)
;;
windows)
# TODO check windows host IP in WSL and WSL2
myIp=$(tail -1 /etc/resolv.conf | cut -d' ' -f2)
;;
esac
echo "${myIp}"
return "${TRUE}"