2016-05-23 12 views
2

Ok, ich erstellte leere RC2-Projekt und läuft lokal mit VS 2015 funktioniert es.Ausführen von RC2-Projekt auf definierten Port

Jetzt möchte ich es mit Docker auf Linux-Server bereitstellen - so wie sollte meine Dockerfile aussehen? Ich verfolge these instructions, und das ist, was ich am Ende mit:

FROM microsoft/dotnet:1.0.0-preview1 

COPY . /app 
WORKDIR /app 

RUN dotnet restore 

EXPOSE 5004 
ENTRYPOINT dotnet run 

dann baute ich meine App Bild: Docker -t my_app bauen.

und laufen mit: Docker run -t 8080 -p: 5004 my_app

Danach habe ich Informationen habe das Bild läuft, und es hört auf localhost: 5000. Leider habe ich versucht, eine Verbindung zu diesem Server mit xxxx: 5000, xxxx: 5004 und xxxx: 8080 und keiner dieser Adressen funktionierte (xxxx ist die Serveradresse).

Mache ich etwas falsch?

+1

Das Problem ist, dass Ihre Anwendung auf "localhost" anstatt auf die interne IP-Adresse abhört, an die Docker Anforderungen weiterleitet. Schauen Sie sich [diese Frage] an (http://stackoverflow.com/questions/37289816/how-to-start-a-asp-net-core-1-0-rc2-app-that-doesnt-listen-to-the- -localhost /) zum Konfigurieren Ihrer Anwendung für die Ausführung auf einem anderen Host als 'localhost'. –

+0

Ich bin auch auf [dieses Tutorial] [1] gestoßen, das zeigt, wie man Docker-Unterstützung zum Projekt [1] hinzufügen: https://losetechies.com/gabrielschenker/2016/05/17/running-and-debugging- an-asp-net-core-rc2-anwendung-running-in-docker / –

Antwort

1

können Sie Turmfalke sagen, welcher Port mithilfe des UseUrls() Erweiterungsmethode hört auf, wie folgt aus:

(dies geht in der Regel in der Program.Main() Einspeisepunkt Methode für mich)

var host = new WebHostBuilder() 
    .UseKestrel() 
    .UseContentRoot(Directory.GetCurrentDirectory()) 
    .UseUrls("http://0.0.0.0:5004") 
    .Build(); 

host.Run(); 

In diesem Fall , würden Sie das docker Bild wie folgt ausführen:

$ docker run -d -p 8080:5004 my_app 

ich wählte die -d Option als Daemon laufen. Stellen Sie sicher, dass der EXPOSED-Port in Ihrer Docker-Datei mit dem in UseUrls angegebenen Port übereinstimmt. Ein komplettes Beispiel hierzu finden Sie in meinem github-Beispielprojekt: https://github.com/mw007/adventure-works

2

Sie können auch die URLs auf Dockerfile-Ebene angeben (besser, wenn Sie den Container erneut verwenden möchten). Hier ist es die volle Dockerfile:

FROM microsoft/dotnet 

RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list 

COPY . /app 
WORKDIR /app 
RUN ["dotnet", "restore"] 
RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 
ENTRYPOINT ["dotnet", "run", "--server.urls=http://0.0.0.0:5000"] 

Sie müssen auch die Program.cs ändern Datei, die die Konfiguration von den wichtigsten Argumente zu lesen:

public static void Main(string[] args) 
    { 
     var config = new ConfigurationBuilder() 
      .AddCommandLine(args) 
      .AddEnvironmentVariables(prefix: "ASPNETCORE_") 
      .Build(); 

     var host = new WebHostBuilder() 
      .UseConfiguration(config) 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 
    } 

Sie haben die Schritt-für-Schritt-Anleitung und Warum in diesem Blogbeitrag: https://www.sesispla.net/blog/language/en/2016/05/running-asp-net-core-1-0-rc2-in-docker/