.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
相关产品推荐
相关产品推荐

