.Net Core WebApi拒绝Docker容器中的连接

时间:2017-05-25 17:53:04

标签: docker asp.net-web-api asp.net-core .net-core

我正在尝试使用我用dotnet核心编写的小型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"]

我正在建造像这样的人:

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

但没有成功。有谁看到我做错了什么或错过了什么?

3 个答案:

答案 0 :(得分:1)

Now listening on: http://localhost:5000

绑定到localhost将不适用于您的方案。您需要将应用程序绑定到0.0.0.0才能使docker端口转发工作。完成后,您应该能够访问VM IP上的应用程序端口5000

答案 1 :(得分:1)

  1. 确保您的服务正在使用http://*:500或类似内容监听所有端口(如果它在运行时打印localhost,则无法正常工作)。
  2. 如果您使用VirtualBox设置docker环境并使用例如docker-machine,您需要使用运行docker容器的虚拟机的IP地址。您可以通过docker-machine ip default
  3. 获取IP

答案 2 :(得分:1)

我找到了解决这个问题的方法。您需要做的就是将launchSettings.json更改为应用设置的"applicationUrl": "http://*:5000/"。构建图像。然后在运行映像docker run -d -p 81:5000 aspnetcoreapp后运行容器docker exec container_id ipconfig的获取IP地址。然后在浏览器http://container_ip:5000/api/values中。由于某种原因,它不起作用http://localhost:81仍然需要找出原因。