.NET Core 7.0空API在Docker中无法访问问题求助
ASP.NET Core Web API Docker运行无法访问问题
我基于带Swagger的ASP.NET Core Web API模板创建了空项目,本地HTTP运行完全正常,但用Docker运行时无法访问页面。已暴露80和443端口,通过Visual Studio运行镜像且端口映射正确,访问地址为 https://localhost:49163/swagger。
容器日志信息
2023-01-10 11:17:40 info: Microsoft.Hosting.Lifetime[14] 2023-01-10 11:17:40 Now listening on: https://[::]:443 2023-01-10 11:17:40 info: Microsoft.Hosting.Lifetime[14] 2023-01-10 11:17:40 Now listening on: http://[::]:80 2023-01-10 11:17:40 info: Microsoft.Hosting.Lifetime[0] 2023-01-10 11:17:40 Application started. Press Ctrl+C to shut down. 2023-01-10 11:17:40 info: Microsoft.Hosting.Lifetime[0] 2023-01-10 11:17:40 Hosting environment: Development 2023-01-10 11:17:40 info: Microsoft.Hosting.Lifetime[0] 2023-01-10 11:17:40 Content root path: /app
Dockerfile配置
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build WORKDIR /src COPY ["Test.csproj", "."] RUN dotnet restore "./Test.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "Test.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "Test.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "Test.dll"]
排查及解决建议
- 检查Swagger环境配置:确认
Program.cs中Swagger的启用逻辑,确保没有额外限制(比如仅允许特定IP),即使容器日志显示是Development环境,也需验证代码中是否正确启用Swagger。 - 切换HTTP访问测试:Docker容器内HTTPS证书可能未正确配置,尝试映射容器80端口到本地端口,用
http://localhost:xxxx/swagger访问,排查HTTPS配置问题。 - 验证端口映射真实性:执行
docker ps命令查看容器实际端口映射,确认本地49163端口确实绑定到容器443端口。 - 容器内部访问测试:进入容器内部,执行
curl https://localhost:443/swagger,判断是容器内部服务问题还是外部映射问题。 - 统一发布与运行环境:当前Dockerfile用Release模式发布,本地用Development模式运行,可能存在配置差异。可在发布时指定Development环境,或确保
appsettings.Development.json被正确复制到容器中。
内容的提问来源于stack exchange,提问作者D4rWiNS
相关产品推荐
相关产品推荐

