Doker windows - brak możliwości połączenia po localhost

0

Witam.

Pierwszy raz próbuję pobawić się z dokerem na windows.

Podpierając się poradnikami uruchomiłem kontener z aplikacją asp.

docker pull microsoft/dotnet
docker run -it -p 5000:5000 microsoft/dotnet
export ASPNETCORE_URLS="http://+:5000"
mkdir app
cd app
dotnet new mvc
dotnet restore
dotnet build
dotnet run

Teraz powinienem móc się połączyć z przeglądarki przez adres localhost:5000 - jednak to nie działa.
Pytanie: co mogłem zrobić nie tak :)?

0

Jesteś pewny, że aplikacja w kontenerze działa na porcie 5000? Możesz zrobić jakiś wget czy coś na ten adres z środka kontenera żeby to sprawdzić. Może spróbuj poszukać jakiegoś configa w tej aplikacji żeby wystawić to na adresie ip "0.0.0.0".

0

@Markuz tak jak pisałem to moje pierwsze minuty z dokerem, więc niczego nie jestem pewny;).

Tak to wygląda:
screenshot-20191004233103.png

Wychodzi na to, żę aplikacja nasłuchuje na porcie 5000.

Możesz zrobić jakiś wget czy coś na ten adres z środka kontenera żeby to sprawdzić.

Uruchamiając aplikację, mam "zablokowany" kontener - w jaki sposób mogę wykonywać jakieś dodatkowe operacje?

0

Uruchomiłem proces z '&' i wyszło coś takiego:
screenshot-20191004235251.png

1

Masz tam warningi które świadczą o tym, że coś z tym z adresem jest nie tak, po przeklejeniu treści do Google otrzymujemy (na przyszłośc polecam przeklejać wszystkie warning/error do Google ;)):

https://stackoverflow.com/questions/51188774/docker-dotnet-watch-run-error-unable-to-bind-to-https-localhost5000-on-the-i

czyli poradę żeby właśnie zmienić adres ip aplikacji na "0.0.0.0".

Jak chcesz się wbić do tego samego kontenera w osobnej sesji możesz skorzystać z docker exec -it {nazwa_kontenera} bash

Odnośnie tego curla to jakoś dziwnie wygląda, pewnie to jakiś windowsowy, 307 to http status odpowiedzi? Powinno być pewnie 200 a tutaj masz jakiś redirect. Możesz go odpalić z jakimś parametrem "verbose" żeby mieć więcej informacji? Chyba, że pomoże to ustawienie odresu.

0

Ostrzeżenia dotyczą chyba tylko IPv6, no i w każdym poradniku który znalazłem, było napisane że powinno działać po localhost ;).

Mimo wszystko spróbuję powalczyć z tym 0.0.0.0.

0

Jak kontener zbinduje się do localhost:5000 to nasłuchuje na swoim własnym porcie 5000 i tego "nie widać" na zewnątrz (nawet przy -p 5000:5000, które masz zresztą zrobione). Dziwne jest tylko to, że masz ASPNETCORE_URLS="http://+:5000", przez co twoja aplikacja powinna nasłuchiwać na wszystkich adresach na porcie 5000.

Odpal przez dotnet run --urls http://+:5000.

0

Panowie na dobrą sprawę to ten asp odpalałem dla testu, docelowo zależy mi na odpaleniu bedework.

Pobrałem i uruchomiłem obraz:
screenshot-20191005111033.png

W drugim oknie (korzystając z porady Markuza) połaczyłem się pod kontener i odpaliłem curl localhost:8080 - wygląda na to, że aplikacja działa poprawnie:
screenshot-20191005111239.png

Teraz pytanie jak dobrać się do kontenera z zewnątrz?
Da się skonfigurować dockera tak żeby kontener dostawał adres z dhcp jak by był oddzielną maszyną w sieci (czyli tak jak działa "standardowa wirtualka")?

1

Teraz pytanie jak dobrać się do kontenera z zewnątrz?

Nic nie musisz robić, w momencie jak robisz -p 8080:8080 to Docker zaczyna na twojej maszynie-hoście nasłuchiwać na 0.0.0.0:8080. Co najwyżej skonfiguruj sobie firewall pod Windows, aby ci przepuszczało ruch i będzie działać.

W PowerShellu:

New-NetFirewallRule -DisplayName Port8080Open -Name Port8080Open -Direction Inbound -Profile Any -LocalPort 8080 -Action Allow -Protocol TCP -Enabled True

Da się skonfigurować dockera tak żeby kontener dostawał adres z dhcp jak by był oddzielną maszyną w sieci (czyli tak jak działa "standardowa wirtualka")?

Takiej kombinacji nigdy nie robiłem. Popatrz na https://docs.docker.com/network/macvlan/ ale nie wiem czy to działa na Windows.
Ale pytanie - dlaczego potrzebujesz akurat takiego rozwiązania?

[update: nie działa. ale możesz przejrzeć to co jest napisane w https://hub.docker.com/r/qtimmylin/evt_platform/ w sekcji "[IMPORTANT] Place Docker for Windows on LAN")

0

Dodałem regułę którą zaproponowałeś ale nadal bez zmian.
0.0.0.0:8080 zwraca
screenshot-20191005130116.png

curl 0.0.0.0:8080 uruchamiany w kontenerze zwraca poprawie zawartość strony.

A może powinienem coś zmienić w ustawieniach sieciowych dockera?
screenshot-20191005130233.png

Ale pytanie - dlaczego potrzebujesz akurat takiego rozwiązania?

Nie wiem czy potrzebuje... szczerze mówiąc nie czuje póki co w ogóle tej technologii. Podchodzę do tego trochę jak do VM co pewnie jest błędem ;)

2

Ale w przeglądarce wchodzisz już na 127.0.0.1/localhost albo ip zaczynające się od 192 w lokalnej sieci (sprawdź sobie w ifconfig/ipconfig jakie masz) - spróbuj może zadziała.

0

Zrobiłem to samo na drugim komputerze i zadziałało :)
Na tym "pierwszym" nie działa ani localhost:8080 ani 127.0.0.1:8080.

0

Zadziałało połowicznie jednak...

Strona główna się wyświetla, po kliknięciu user calendar przenosi na stornę logowania, ale zalogować się już nie da...
To problem z samym obrazem czy może chodzić o to, że odpalam pod Windowsem (widziałem, że na docker hub jest podział wg. systemu operacyjnego)
screenshot-20191006102146.png
?

0

@Ktos chodzi o system operacyjny na którym zainstalowany jest host czy o typ kontenera wybrany w programie?
Host zainstalowany jest na Windows 10 , ale wybrany chet typ Luny
screenshot-20191006202015.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1