提问人:yogihosting 提问时间:11/18/2023 更新时间:11/18/2023 访问量:37
无法在浏览器上的 Docker 中访问 ASP.NET Core 8.0 应用程序
Cannot access ASP.NET Core 8.0 app in Docker on the browser
问:
我在 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://+'.”。我认为这就是问题所在,解决方案是什么。见下图:
如果我通过运行以下命令使用 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 上,以前的版本运行良好。
有什么解决办法吗??
答:
在日志的屏幕截图中,可以看到应用正在侦听端口 443 和 80。
那是由于你的ASPNETCORE_URLS价值。
Dockerfile 中的 EXPOSE 语句不会使其侦听这些端口。EXPOSE 主要用作应用程序侦听哪些端口的文档。但就像所有文档一样,它可能是错误的。
因此,您需要映射端口 443 和 80,而不是像上一条语句中那样映射 8080 和 8081。docker run
如果希望应用侦听端口 8080 和 8081,则应将 ASPNETCORE_URLS 设置为 。https://+:8081;http://+:8080
评论
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
评论