2016-08-19 141 views
4

我在asp.net內核中創建了一個應用程序,並創建了一個dockerfile來生成本地圖像並運行它。無法訪問本地Docker容器上的Asp.Net Core

FROM microsoft/dotnet:latest 

COPY . /app 

WORKDIR /app 

RUN ["dotnet", "restore"] 

RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 

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

然後,我已經建造我的形象,用下面的命令

docker build -t jedidocker/first . 

然後,我創建了一個容器,使用下面的命令

docker run -t -d -p 5000:5000 jedidocker/first 

但是當我運行跟着url進入我的主機瀏覽器

http://localhost:5000/ 

我有一個ERR_EMPTY_RESPONSE

它是一個網絡問題?我該如何解決它?

P.S:我的Windows版本10.0.10586

回答

6

我有同樣的問題,並找到了解決這個。您將需要更改默認偵聽主機名。默認情況下,應用程序將偵聽本地主機,忽略來自容器外部的任何傳入請求。更改你的代碼中program.cs監聽所有來電:

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

     host.Run(); 
    } 
} 

更多信息:

https://medium.com/trafi-tech-beat/running-net-core-on-docker-c438889eb5a#.hwhoak2c0

確保您正在運行與-p標誌與端口綁定的容器。

docker run -p 5000:5000 <containerid> 

在寫這篇文章的時候,似乎

EXPOSE 5000:5000 

命令沒有作爲-p命令相同的效果。我還沒有用-P(大寫)取得真正的成功。

編輯8/28/2016:

有一點要注意。如果您使用docker與-d(分離)模式組合,則dotnet run命令啓動服務器可能需要一些時間。在完成執行命令(以及之前的任何其他命令)之前,您將在Chrome中收到ERR_EMPTY_RESPONSE

4

如下只需更新您的入口點,無需更改代碼:

ENTRYPOINT ["dotnet", "run", "--server.urls", "http://*:5000"] 

在Windows Server 2016上的默認泊塢窗網絡是NAT,所以你可能要使用,你可以找到與IP docker inspect <container name/ID>。不知道這是否也適用於其他Windows版本。

+0

Balint,你能解釋爲什麼這個工作?它解決了我的問題,但我不確定我明白爲什麼。 – tylerjgarland

+0

@tylerjgarland它將使dotnet監聽所有IP地址(接口)不只是本地主機(環回) –

相關問題