2016-05-23 48 views
2

好的,我創建了空的RC2項目並使用VS 2015在本地運行。在定義好的端口上運行RC2項目

現在我想使用docker將其部署到linux服務器 - 那麼我的dockerfile應該如何查看?我一直在關注these instructions,而這也正是我結束了:

FROM microsoft/dotnet:1.0.0-preview1 

COPY . /app 
WORKDIR /app 

RUN dotnet restore 

EXPOSE 5004 
ENTRYPOINT dotnet run 

然後我建我的應用程序圖像: 搬運工建立-t my_app應用。

和使用運行: 搬運工運行-t -p 8080:5004 my_app應用

之後,我得到的信息是圖像正在運行,它監聽在localhost:5000。不幸的是,我一直試圖用xxxx:5000,xxxx:5004和xxxx:8080連接到這個服務器,並且這些地址都沒有工作(xxxx是服務器地址)。

我做錯了什麼?

+1

問題是,你的應用程序正在偵聽'本地主機'而不是內部IP地址的Docker轉發請求。看看[這個問題](http://stackoverflow.com/questions/37289816/how-to-start-a-asp-net-core-1-0-rc2-app-that-doesnt-listen-to-the -localhost /),用於配置您的應用程序在「localhost」以外的主機上運行。 –

+0

我也遇到了[本教程] [1],它展示瞭如何將Docker支持添加到項目 [1]:https://lostechies.com/gabrielschenker/2016/05/17/running-and-debugging-一個-ASP淨芯RC2-應用磨合-搬運工/ –

回答

1

你可以告訴隼哪個端口使用UseUrls()擴展方法來監聽,像這樣:

(這一般無二的Program.Main()入口點方法對我來說)

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

host.Run(); 

在這種情況下, ,您將運行搬運工像這樣的:

$ docker run -d -p 8080:5004 my_app 

我選擇了-d選項作爲守護程序運行。只要確保Dockerfile中的EXPOSED端口與UseUrls中指定的端口匹配。有關完整示例,請隨時查看我的github示例項目:https://github.com/mw007/adventure-works

2

您還可以在Dockerfile級別指定Urls(如果要重新使用Container,則更好)。這是完整的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"] 

您還需要修改Program.cs文件讀取來自主ARGS配置:

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(); 
    } 

你有一步一步的教程和爲什麼在這個博客文章: https://www.sesispla.net/blog/language/en/2016/05/running-asp-net-core-1-0-rc2-in-docker/

相關問題