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

.Net Core WebApi拒绝Docker容器中的连接,docker,asp.net-web-api,asp.net-core,.net-core,Docker,Asp.net Web Api,Asp.net Core,.net Core,我正在用dotnet core编写的一个小WebApi试用Docker Api似乎工作正常,因为当我使用dotnet run运行它时,它会正常启动,并且可以在端口5000上访问。但当我在Docker容器中运行它时,它会启动,但我无法在暴露/映射端口上访问它。我用VirtualBox在Windows10上运行Docker 我的Dockerfile如下所示: FROM microsoft/aspnetcore-build:latest COPY . /app WORKDIR /app RUN dot

我正在用dotnet core编写的一个小WebApi试用Docker

Api似乎工作正常,因为当我使用
dotnet run
运行它时,它会正常启动,并且可以在端口5000上访问。但当我在Docker容器中运行它时,它会启动,但我无法在暴露/映射端口上访问它。我用VirtualBox在Windows10上运行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 .
我正在这样建造dontainer:

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
run命令的输出为:

Hosting environment: Production
Content root path: /app
Now listening on: http://localhost:5000
我还尝试了绑定URL的不同方法:

  • 作为http://+:5000,
    http://0.0.0.0:5000
    http://localhost:5000
  • 通过CLI参数
    --url
    /
    --server.url
但是没有成功。有人知道我做错了什么或错过了什么吗

Now listening on: http://localhost:5000
绑定到localhost将不适用于您的场景。你需要让应用程序绑定到0.0.0.0,docker端口转发才能工作。一旦你这样做了,你应该能够在VM IP上访问应用程序,端口5000

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

  • 我找到了解决这个问题的办法。您只需编辑launchSettings.json,将其更改为应用程序设置的“http://*:5000/”。塑造形象。然后运行映像
    docker run-d-p 81:5000 aspnetcoreapp
    ,然后运行获取容器的ip地址
    docker exec container\u id ipconfig
    。然后在浏览器中。由于某些原因,它无法工作,但仍需要找出原因。

    您的操作系统是什么?是windows/osx还是linux?我忘了提。它正在Windows上运行。。。我在问题run
    docker-inspect-f'{range.NetworkSettings.Networks}}{{{.IPAddress}{{end}}'
    中更新了它的IP地址。用IP替换
    localhost
    。看看这是否有效。@pizycki不幸的是,这也不起作用。。。如果您运行的是Windows 10或更早版本,超时时间会更长?他们使用不同的virt机制。谢谢你的回答。我刚试过,但还是不行luck@DanielLerps,您的虚拟机VirtualBox是否具有可访问的IP lan网络?我想这就是重点