首页 文章

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

提问于
浏览
1

我正在尝试使用我用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"]

我正在建造这样的dontainer:

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的方法:

  • as http://+:5000http://0.0.0.0:5000http://localhost:5000 ,...

  • 通过CLI参数 --urls / --server.urls

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

3 回答

  • 1
    Now listening on: http://localhost:5000
    

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

  • 1
    • 确保您的服务正在使用 http://*:500 或类似内容侦听所有端口(如果它在运行时打印 localhost ,则无效) .

    • 如果使用VirtualBox设置docker环境并使用例如docker-machine,您需要使用运行docker容器的虚拟机的IP地址 . 你可以通过 docker-machine ip default 获得IP .

  • 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仍然需要找出原因 .

相关问题