2016-07-02 10 views
4

Ich bin in eine Sackgasse geraten. Ich habe eine Dotnet Core 1.0.0 App, die ich versuche, zu starten. Es funktioniert gut von Linux und von Windows. Jetzt versuche ich es in Docker zu bekommen. Ich habe diese Docker Datei gemacht:Kann nicht auf meine Docker-DotNet-Core-Website zugreifen

FROM microsoft/dotnet:1.0.0-preview2-sdk 

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

ENTRYPOINT ["dotnet", "run"] 

Es ist einfach nur Kopien Code in App-Ordner in Docker Bild und Abhängigkeiten wiederherzustellen und führt es dann. Wenn ich versuche, es zu starten, startet es, wie alles funktioniert und druckt das gleiche wie es auf Windows oder Linux war Start.

Docker Console

Befehl für die Ausführung des Projekts:

docker run --name dotNetWeb -p 8080:8080 kiksen1987/dotnetcore 

Link zum Code: https://github.com/kiksen1987/dotnetcore

Link zu Docker Bild: https://hub.docker.com/r/kiksen1987/dotnetcore/

Ich habe wirklich keine Ahnung, was ist falsch machen. Ich habe mehr oder weniger den gleichen Ansatz wie 99% meiner anderen Projekte.

Jedes Feedback, diese Frage zu verbessern schön als gut :)

+0

Ich habe auch versucht, --expose in Dockerfile ohne es zu helfen. – Kiksen

+0

Aus irgendeinem Grund scheint es auch localhost: 8080 wird umgeleitet zu http://www.localhost.com:8080/ – Kiksen

+0

Und warum zur Hölle Downvote? dafür, keine Forschung zu betreiben. Ich suche google dünn und nutze mehrere Stunden zu diesem Thema .... – Kiksen

Antwort

9

Schließlich wäre.

fand ich diesen Blog-Post: http://dotnetliberty.com/index.php/2015/11/26/asp-net-5-on-aws-ec2-container-service-in-10-steps/

Auch wenn es eine alte Version des Dotnet Kern es ein wichtiger Punkt war, pflegte ich betreut hatte;

Beachten Sie, dass ich dem dnx web-Befehl einen zusätzlichen Parameter zur Verfügung gestellt habe, um ihn an 0.0.0.0 zu liefern (anstatt an den Standard-localhost). Auf diese Weise kann unsere Webanwendung Anfragen aus der Portweiterleitung von Docker mit der Standardeinstellung 0.0.0.0 bedienen.

Was ist verdammt wichtig.

Lösung:

var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseStartup<Startup>() 
      .UseUrls("http://0.0.0.0:5000") 
      .Build(); 

Alter Code:

var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseStartup<Startup>() 
      .UseUrls("http://localhost:5000") 
      .Build(); 

Welche Wery frustrierend, da es schien in Linux und Windows und App in Docker Anfahren perfekt zu arbeiten, aber nie irgendwelche Anfragen bekommen. hoffe, das hilft einige andere arme Seelen da draußen :)

+2

Es ist möglich, auf den UseUrls-Aufruf ganz zu verzichten, indem man eine Umgebungsvariable in der Docker-Datei setzt: ENV ASPNETCORE_URLS = "http://0.0.0.0:5000" –

+1

was auch als http: // *: 5000 angegeben werden kann, nur FYI – DerrickF

0

Sie können einige nützliche Informationen für Build ein benutzerdefiniertes Bild mit ASP.NET-Core und Docker an finden Sie hier: https://hahoangv.wordpress.com/2016/05/23/asp-net-core-run-in-docker/

Dockerfile:

FROM microsoft/dotnet:1.0.0-preview2-sdk 

# Set environment variables 
ENV ASPNETCORE_URLS="http://*:5000" 
ENV ASPNETCORE_ENVIRONMENT="Development" 

# Copy files to app directory 
COPY . /app 

# Set working directory 
WORKDIR /app 

# Restore NuGet packages 
RUN ["dotnet", "restore"] 

# Open up port 
EXPOSE 5000 

# Run the app 
ENTRYPOINT ["dotnet", "run"] 

und die Datei Program.cs:

public static void Main(string[] args) 
     { 
      // Get environment variables 
      var config = new ConfigurationBuilder() 
       .AddEnvironmentVariables(&quot;&quot;) 
       .Build(); 
      // You need to add these lines for accessing outside of Docker 
      var url = config["ASPNETCORE_URLS"] ?? "http://*:5000"; 
      var env = config["ASPNETCORE_ENVIRONMENT"] ?? "Development"; 

      var host = new WebHostBuilder() 
       .UseKestrel() 
       .UseUrls(url) 
       .UseEnvironment(env) 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 

      host.Run(); 
     } 

Hope this Hilfe!

Verwandte Themen