2017-05-25 169 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仍然需要弄清楚为什么。