2015-11-28 39 views
6

Mam następujące instrukcje: Running ASP.NET 5 applications in Linux Containers with Docker i nie mogę tego uruchomić na moim komputerze z systemem Windows lub Linux. Moja dockerfile wygląda następująco:Nie można uruchomić asp.net 5 z dokowania

FROM microsoft/aspnet 

COPY . /app 
WORKDIR /app 
RUN ["dnu", "restore"] 

EXPOSE 5000/tcp 
ENTRYPOINT ["dnx", "-p", "project.json", "web"] 

I pobiegł docker build -t myapp . a następnie docker run -d -p 80:5000 myapp mówi, że to działa, ale nie mogę otworzyć strony internetowej w przeglądarce. Wiem, że w systemie Windows powinieneś znaleźć adres IP, na którym działa wirtualna maszyna, używając docker-machine ip default, która zakończyła się 192.168.99.100, ale kiedy nawigowałem do http://192.168.99.100, otrzymuję komunikat o błędzie "Ta strona jest niedostępna". Próbowałem również różnych wersji tego polecenia uruchamiania w doku, na przykład docker run -it -p 80:5000 myapp, docker run -p 80:5000 myapp, a także wypróbowałem różne porty, takie jak docker run -d -p 5000:5000 myapp, ale nic nie działa.

Próbowałem tego zarówno na moim komputerze z systemem Windows, jak i na moim serwerze Linux, ale oba nie działają.

Jestem w stanie uruchomić dnx web bez dockera i wszystko działa zgodnie z oczekiwaniami.

+0

Czy używasz wirtualnej skrzynki lub czegoś w tym stylu? A może jest to właściwa instalacja serwera? – RubbleFord

Odpowiedz

3

Aby lepiej zrozumieć środowisko aplikacji, opublikuj swój plik project.json i wersję beta ASP.net, z którym współpracujesz.

Na razie możesz spróbować wyczyścić plik Dockerfile poprzez usunięcie argumentów "project.json" i "-p" z instrukcji ENTRYPOINT, usunąć tcp z komendy EXPOSE, a na końcu określić "--server.urls "argument instrukcji punkt_wejścia tak, że używa 0.0.0.0 zamiast domyślnego localhost następująco:

FROM microsoft/aspnet 

COPY . /project   
WORKDIR /project  
RUN ["dnu", "restore"] 

EXPOSE 5000 

ENTRYPOINT ["dnx", "web", "--server.urls"] 

Alternatywnie, można spróbować upuszczenie polecenie eXPOSE całkowicie i narazić port Döcker, 5000, w instrukcji punkt_wejścia w następujący sposób:

FROM microsoft/aspnet 

COPY . /project   
WORKDIR /project  
RUN ["dnu", "restore"] 

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:500"] 

Tak czy inaczej byś wtedy budować swój pojemnik i uruchomić go za pomocą czegoś tak:

$ docker run -it -p 80:5000 myapp 
+0

Ciekawe, że korzystam z przykładowego projektu z serwisu asp.net i korzystam z przewodnika bezpośrednio połączonego z jego stroną dokową, a mimo to nie działa. Czy możesz dodać wyjaśnienie, dlaczego tak działa i być może dlaczego to, co dostarczają, nie działa? – socketman

+0

@socketman Przewodnik połączony jest od stycznia, który wygląda jak beta2. Od tego czasu wydano 6 kolejnych betów, aw tym miesiącu ostatecznie rc1. Wiele się zmieniło :) –

6

Spójrz na moją odpowiedź tutaj: ASP.NET 5.0 beta 8 in Docker doesn't start

Zasadniczo Docker przekazuje wnioski do kontenera na 0.0.0.0 interfejs sieciowy, ale Kestrel domyślnie nasłuchuje na localhost.

Tak, zgłoszenia są przekazywane do kontenera w doku, ale nie są akceptowane przez serwer Kestrel. Z tego powodu trzeba zastąpić właściwość server.urls jak inni napisali:

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"] 

Następnie należy zobaczyć:

Now listening on: http://0.0.0.0:5000 

podczas prowadzenia pojemnik. Możesz także wykonać szybkie polecenie docker ps, aby sprawdzić, czy 0.0.0.0 jest interfejsem sieciowym, do którego Docker przekazuje żądania.

Napisałem też trochę o tym, jak uzyskać ASP.NET 5 działający w Dockerze na Windowsie - jest nieco bardziej zaangażowany, ponieważ Docker nie tylko musi przekazywać żądania do kontenera, ale musimy też przekonać VirtualBox do przekazania żądań do maszyny wirtualnej Docker boot2docker (zazwyczaj nazywanej default w Virtual Box) zanim Docker przekaże je do naszego kontenera.

post jest tutaj: http://dotnetliberty.com/index.php/2015/10/25/asp-net-5-running-in-docker-on-windows/

1

można znaleźć pracę, krok po kroku tutorial na Docker i ASP.NET podstawowej RC1 tutaj: https://www.sesispla.net/blog/language/en/2015/12/recipe-asp-net-5-net-core-to-the-docker-container/

Najtrudniejsze prawdopodobnie brakuje jest zmodyfikować polecenie projects.json następująco:

"commands": { 
    "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://0.0.0.0:5000" 
    }, 

domyślnie Kestrel akceptuje tylko localhost połączeń ... Dzięki tej zmianie pozwalasz połączenie z dowolnego źródła.

2

Dla każdego, kto ma ten problem teraz w RC2, polecenia już nie istnieją. Musisz zaktualizować Program.cs przez połączenie w .UseUrls ("http://0.0.0.0:5000"). Możesz również zmienić wartość z 5000 na dowolny żądany port.

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .UseUrls("http://0.0.0.0:5000") 
      .Build(); 

     host.Run(); 
    } 
}