Docker化ASP.NET Core Web API后无法连接的问题求助
ASP.NET Core Web API Docker化后无法连接问题排查
我将ASP.NET Core Web API进行Docker化,本地VS Code运行正常,但Docker部署后无法连接API。
相关配置与代码
Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env WORKDIR /app COPY ./ ./ RUN dotnet restore RUN dotnet publish -c Release -o outBuildFolder FROM mcr.microsoft.com/dotnet/aspnet:7.0 WORKDIR /app1 ENV DOTNET_URLS=http://+:80 COPY --from=build-env /app/outBuildFolder/ . ENTRYPOINT ["dotnet","ShelfAPI.dll"]
docker-compose.yml 片段
shelfapi: build: ./ShelfAPI ports: - "4040:80" secrets: - my_secret networks: - betterreads
测试接口代码
[HttpGet("Test")] public bool TestCon() { Console.WriteLine("I've made it"); return true; }
操作与异常现象
- 在Docker Desktop的
docker exec终端执行测试命令:curl http://localhost:80/ShelfCtrl/Test - 本地主机和模拟器连接均出现无法连接或超时,未返回预期的
true。 - 容器日志输出:
info: Microsoft.AspNetCore.Hosting.Diagnostics[1] 2023-10-30 15:32:55 Request starting HTTP/1.1 GET http://localhost:4040/ShelfCtrl/Test - - 2023-10-30 15:32:55 info: Microsoft.AspNetCore.Hosting.Diagnostics[2] 2023-10-30 15:32:55 Request finished HTTP/1.1 GET http://localhost:4040/ShelfCtrl/Test - - - 307 0 - 0.9282ms
问题分析与解决方案
日志中的307状态码是临时重定向,说明ASP.NET Core默认开启了HTTPS重定向,但容器内仅配置了HTTP监听80端口,没有HTTPS相关配置,导致重定向后无法访问。
具体解决步骤
关闭HTTPS重定向(测试环境适用)
在Program.cs中找到app.UseHttpsRedirection();代码行,注释或删除即可停止强制HTTPS跳转。配置容器HTTPS(生产环境适用)
- 生成自签名证书或使用正式证书;
- 在Dockerfile中添加证书复制逻辑,同时设置环境变量:
ASPNETCORE_HTTPS_PORT、ASPNETCORE_Kestrel__Certificates__Default__Path、ASPNETCORE_Kestrel__Certificates__Default__Password; - 在docker-compose中映射HTTPS端口(例如
4430:443)。
修正访问命令
- 容器内测试:确保控制器类带有
[Route("[controller]")]特性,使用curl http://localhost:80/ShelfCtrl/Test即可; - 本地主机测试:使用映射后的端口,命令为
curl http://localhost:4040/ShelfCtrl/Test。
- 容器内测试:确保控制器类带有
额外检查点:
- 确认控制器类的路由特性配置正确,避免路径匹配错误;
- 查看容器完整启动日志,确认API是否正常启动并监听80端口。
内容的提问来源于stack exchange,提问作者cynlla
相关产品推荐
相关产品推荐

