You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8.0 API无法通过Docker Compose访问问题排查求助

问题排查与解决方案

核心问题:端口映射不匹配

你的Dockerfile中base阶段声明暴露的是8080和8081端口,但docker-compose.yml里映射的是5000:5000、5001:5001。而.NET 8的ASP.NET Core镜像默认会将服务运行在8080(HTTP)和8081(HTTPS)端口,这就导致你外部访问5000端口时,容器内部并没有服务监听这个端口,所以无法访问接口。

Visual Studio启动时会自动通过环境变量或launchSettings.json覆盖端口配置,所以能正常访问。

解决方案

方案1:修正docker-compose的端口映射

将端口映射改为容器内部实际监听的端口:

version: '3.4'

services:
  todo.api:
    image: todoapi
    container_name: todo.api
    build:
      context: ./TestProject.Service.Todo
      dockerfile: Api/Dockerfile
    ports:
      - "5000:8080"  # 外部5000映射到容器内部8080
      - "5001:8081"  # 外部5001映射到容器内部8081

修改后重新运行docker-compose up --build,之后访问http://localhost:5000/WeatherForecast即可。

方案2:配置API服务使用指定端口

如果希望容器内部服务直接运行在5000/5001端口,可以通过以下方式设置:

方式A:在docker-compose中添加环境变量

version: '3.4'

services:
  todo.api:
    image: todoapi
    container_name: todo.api
    build:
      context: ./TestProject.Service.Todo
      dockerfile: Api/Dockerfile
    environment:
      - ASPNETCORE_URLS=http://+:5000;https://+:5001
      - ASPNETCORE_HTTPS_PORT=5001
    ports:
      - "5000:5000"
      - "5001:5001"

方式B:修改Dockerfile的ENTRYPOINT

在final阶段的ENTRYPOINT中添加端口参数:

ENTRYPOINT ["dotnet", "Api.dll", "--urls", "http://+:5000;https://+:5001"]

额外检查点

  • 确认容器是否正常启动:运行docker logs todo.api查看日志,检查服务启动时输出的监听地址,确认端口是否正确。
  • 检查API项目的appsettings.json或launchSettings.json,是否有硬编码的端口配置,避免与容器设置冲突。

内容的提问来源于stack exchange,提问作者John Jameson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:07:31