在Elastic Beanstalk上访问Docker化ASP.NET Core Web API时出现502错误
Docker化ASP.NET Web API访问出现502 Bad Gateway错误
我将ASP.NET Web API容器化后,访问任意URL都出现502 Bad Gateway错误:

相关配置文件
docker-compose.override.yml
version: '3.4' services: helen.api: environment: - ASPNETCORE_ENVIRONMENT=Development - ASPNETCORE_URLS=http://+:5000 ports: - "5001:443" - "5000:80" volumes: - ~/.aspnet/https:/root/.aspnet/https:ro - ~/.microsoft/usersecrets:/root/.microsoft/usersecrets:ro
Dockerfile
# 参考 https://aka.ms/containerfastmode 了解Visual Studio如何使用此Dockerfile加速镜像构建调试 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["MyProjectWebAPI/MyProject.API.csproj", "MyProjectWebAPI/"] COPY ["MyProject.Globals/MyProject.Globals.csproj", "MyProject.Globals/"] RUN dotnet restore "MyProjectWebAPI/MyProject.API.csproj" COPY . . WORKDIR "/src/MyProjectWebAPI" RUN dotnet build "MyProject.API.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "MyProject.API.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "MyProject.API.dll"]
docker-compose.yml
version: "3.4" services: helen.api: image: ${DOCKER_REGISTRY-}helenapi build: context: . dockerfile: HelenWebAPI/Dockerfile
问题排查与解决办法
端口映射不匹配
你在docker-compose.override.yml里设置ASPNETCORE_URLS=http://+:5000,说明容器内API监听的是5000端口,但端口映射是把主机5000端口映射到容器80端口,导致请求到主机5000后,容器内80端口无服务监听,返回502。
修正二选一:- 将
ASPNETCORE_URLS改为http://+:80,与容器暴露的80端口保持一致; - 修改端口映射为
"5000:5000",让主机5000端口直接映射到容器内监听的5000端口。
- 将
HTTPS配置冲突
你映射了443端口,但仅配置了HTTP监听地址。若需启用HTTPS,需补充:- 添加环境变量
ASPNETCORE_HTTPS_PORT=443; - 确认
~/.aspnet/https目录存在匹配项目的证书文件(如MyProject.API.pfx)。
- 添加环境变量
容器日志排查
执行docker-compose logs helen.api查看容器启动日志,确认API是否正常启动,有无端口监听、证书加载等报错。Dockerfile路径校验
docker-compose.yml中指定的Dockerfile路径为HelenWebAPI/Dockerfile,但项目文件路径是MyProjectWebAPI/MyProject.API.csproj,需确认Dockerfile实际位置是否正确,避免构建出的镜像异常。
内容的提问来源于stack exchange,提问作者Ali Bdeir
相关产品推荐
相关产品推荐

