2017-05-25 166 views
1

我正在嘗試Docker與我在dotnet核心中編寫的小型WebApi。.Net核心WebApi拒絕在Docker容器中的連接

該Api似乎工作正常,因爲當我運行它與dotnet run它啓動正常,並可以在端口5000.但是,當我運行它在一個Docker容器它啓動,但我無法達到它的暴露/映射端口。我使用VirtualBox在Windows 10上運行Docker。

我Dockerfile看起來是這樣的:

FROM microsoft/aspnetcore-build:latest 
COPY . /app 
WORKDIR /app 
RUN dotnet restore 
EXPOSE 5000 
ENV ASPNETCORE_URLS http://*:5000 
ENTRYPOINT ["dotnet", "run"] 

我建立了dontainer這樣的:

docker build -t api-test:v0 . 

而與此命令來運行它:

docker run -p 5000:5000 api-test:v0 

的輸出運行命令是:

Hosting environment: Production 
Content root path: /app 
Now listening on: http://localhost:5000 

我自己也嘗試結合的URL不同的方法:

  • 作爲http://+:5000http://0.0.0.0:5000http://localhost:5000,...
  • 通過CLI參數--urls/--server.urls

但沒有成功。有沒有人看到我做錯了或失蹤?

+0

你的操作系統是什麼?它是Windows/OSX或Linux? – pizycki

+0

我忘了提。它運行在Windows上......我在 –

+0

運行docker inspect -f {{range .NetworkSettings.Networks}} {{。IPAddress}} {{end}}'「的問題中更新了它的IP。用IP替換'localhost'。看看是否有效。 – pizycki

回答

0
Now listening on: http://localhost:5000 

綁定到本地主機將不適用於您的方案。您需要將應用程序綁定到0.0.0.0才能使碼頭端口轉發工作。一旦你這樣做,你應該能夠達到的VM IP的應用程序,端口5000

+0

感謝您的回答。我只是試了一下,但仍然沒有運氣 –

+0

@DanielLerps,您的VM VirtualBox是否具有IP lan-network可達?我認爲這是重點 – Robert

1
  1. 確保您的服務使用http://*:500或類似(如果它在運行時打印localhost,它贏得了」所有端口​​上偵聽工作)。
  2. 如果您使用VirtualBox設置Docker環境並使用例如docker-machine中,您需要使用運行Docker容器的虛擬機的IP地址。您可以通過docker-machine ip default獲得IP。
0

我找到了一個方法。您只需編輯launchSettings.json更改爲您的應用設置的"applicationUrl": "http://*:5000/"即可。建立圖像。然後在運行獲取容器的IP地址docker exec container_id ipconfig後運行映像docker run -d -p 81:5000 aspnetcoreapp。然後在瀏覽器http://container_ip:5000/api/values。由於某種原因,它不起作用http://localhost:81仍然需要弄清楚爲什麼。