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

我正在尝试Docker与我已经在dotnet核心写的一个小的WebApi。

该Api似乎工作正常,因为当我运行它的networkingdotnet 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"] 

我正在build造这样的容器:

 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://localhost:5000http://localhost:5000 ,…
  • 通过CLI参数--urls / --server.urls

但没有成功。 有没有人看到我做错了或失踪?

  1. 确保你的服务使用http://*:500或类似的方式监听所有的端口(如果在运行时打印localhost ,它将不起作用)。
  2. 如果您使用VirtualBox设置docker环境并使用docker-machine,则需要使用运行docker容器的虚拟机的IP地址。 你可以通过docker-machine ip default获得IP。
 Now listening on: http://localhost:5000 

绑定到本地主机将不适用于您的scheme。 您需要将该应用程序绑定到0.0.0.0以使docker端口转发正常工作。 一旦你这样做,你应该能够到达虚拟机IP,端口5000的应用程序

我find了一个方法。 所有你需要做的是编辑launchSettings.json改为"applicationUrl": "http://*:5000/"你的应用程序设置。 build立图像。 然后在运行镜像docker run -d -p 81:5000 aspnetcoreapp后运行docker run -d -p 81:5000 aspnetcoreapp获取容器的docker exec container_id ipconfig IP地址。 然后在浏览器http:// container_ip:5000 / api / values 。 由于某种原因,它不工作http:// localhost:81仍然需要弄清楚为什么。