无法在浏览器上的 Docker 中访问 ASP.NET Core 8.0 应用程序

Cannot access ASP.NET Core 8.0 app in Docker on the browser

提问人:yogihosting 提问时间:11/18/2023 更新时间:11/18/2023 访问量:37

问:

我在 DOT NET 8.0 中构建了一个 ASP.NET Core MVC 应用程序。然后将 Dockerfile 添加到其中。Dockerfile 如下:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["DockerHttps.csproj", "."]
RUN dotnet restore "./././DockerHttps.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "./DockerHttps.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./DockerHttps.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerHttps.dll"]

接下来,我为应用程序创建 docker 映像:

docker build -t dhttps:v1 .

映像已创建。到现在都没有问题。然后,我在容器上运行它:

docker run -p 7000:8080 -p 7001:8081 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=7001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="mypass123" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ dhttps:v1

请参阅上述命令中的端口 - -p 7000:8080 -p 7001:8081。8080 和 8081 命令在 Dockerfile 上给出。

EXPOSE 8080
EXPOSE 8081

问题是我无法使用 url https://localhost:7001 在浏览器上访问该应用程序。

我收到一条消息 - “ 覆盖HTTP_PORTS '8080' 并HTTPS_PORTS ''。绑定到 URL 定义的值,而不是 'https://+;http://+'.”。我认为这就是问题所在,解决方案是什么。见下图:enter image description here

如果我通过运行以下命令使用 80 和 443 端口:

docker run -p 7000:80 -p 7001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=7001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="mypass123" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ dhttps:v1

然后我就可以打开应用程序了。

Microsoft 更改了 .NET 8 应用程序的 Dockerfile,他们添加了我之前展示过的新 Expose 端口。此问题仅发生在 .NET 8 上,以前的版本运行良好。

有什么解决办法吗??

docker asp.net-core asp.net-core-8

评论

0赞 JRichardsz 11/18/2023
你解决了你的问题吗?
0赞 yogihosting 11/18/2023
@JRichardsz是的。在接受的答案评论中,我给出了正确的命令。

答:

2赞 Hans Kilian 11/18/2023 #1

在日志的屏幕截图中,可以看到应用正在侦听端口 443 和 80。

那是由于你的ASPNETCORE_URLS价值。

Dockerfile 中的 EXPOSE 语句不会使其侦听这些端口。EXPOSE 主要用作应用程序侦听哪些端口的文档。但就像所有文档一样,它可能是错误的。

因此,您需要映射端口 443 和 80,而不是像上一条语句中那样映射 8080 和 8081。docker run

如果希望应用侦听端口 8080 和 8081,则应将 ASPNETCORE_URLS 设置为 。https://+:8081;http://+:8080

评论

1赞 yogihosting 11/18/2023
您所说的命令奏效了。正确的命令是 - 。谢谢。docker run -p 7000:8080 -p 7001:8081 -e ASPNETCORE_URLS="https://+:8081;http://+:8080" -e ASPNETCORE_HTTPS_PORT=7001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="mypass123" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ dhttps:v1