ASP.NET Core Docker 容器应用程序无法访问

Pal*_*lmi 5 https docker asp.net-core

我在 MacOS 上的 Docker 容器中运行 ASP.NET Core 服务。
Visual Studio for Mac v18.1.2(内部版本 2).NET Core SDK:2.2.300

这是 Dockerfile:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /
COPY src/Services/Service.API/Service.API.csproj src/Services/Service.API/
RUN dotnet restore src/Services/Service.API/Service.API.csproj
COPY . .
WORKDIR /src/Services/Service.API
RUN dotnet build Service.API.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish Service.API.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Service.API.dll"]
Run Code Online (Sandbox Code Playgroud)

该服务的 docker-compose 文件如下所示:

service.api:
  build:
    context: .
    dockerfile: src/Services/Service.API/Dockerfile
  environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=http://+:80;https://+:443
    - ASPNETCORE_HTTPS_PORT=5254 
    - ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword
    - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  ports:
    - "5204:80"
    - "5254:443"
  volumes:
    - ${HOME}/.aspnet/https:/https/
Run Code Online (Sandbox Code Playgroud)

正在运行的 Docker 容器的端口看起来也不错:

0.0.0.0:5204->80/tcp, 0.0.0.0:5254->443/tcp

但是当我尝试调用https://localhost:5254时,它说无法访问站点。

另外,在输出中我看到以下警告:

警告:Microsoft.AspNetCore.Server.Kestrel[0] 无法绑定到IPv6 环回接口上的https://localhost:5001 :“无法分配请求的地址”。Microsoft.AspNetCore.Server.Kestrel:警告:无法绑定到 IPv6 环回接口上的https://localhost:5001:“无法分配请求的地址”。托管环境:开发内容根路径:/app 现在监听:https://localhost:5001

为什么它不采用 ASPNETCORE_URLS 环境变量设置的 url?

我还能做些什么来排除故障以找到问题?

Ali*_*ami 6

不久前我遇到了你的问题,这就是我解决它的方法。您需要指定--server.urls为运行参数,如下所示:

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Service.API.dll", "--server.urls", "http://+:80;https://+:443"]
Run Code Online (Sandbox Code Playgroud)

那它5000从哪里来5001

Kestrel 端点配置

默认情况下,ASP.NET Core 绑定到:

http://本地主机:5000

https://localhost:5001(当存在本地开发证书时)

更新1:

根据您的 docker-compose 配置,您已设置ASPNETCORE_ENVIRONMENTDevelopment. 我认为您应该将其更改为,Production因为当您启用时Development将从ASP.NET Core中读取设置launchSettings.json

开发环境可以启用不应在生产中公开的功能。例如,ASP.NET Core 模板在开发环境中启用开发人员异常页面。

本机开发的环境可以在项目的Properties\launchSettings.json文件中设置。launchSettings.json 中设置的环境值会覆盖系统环境中设置的值。

据我记得,默认端口是Kestrel80并且443在每个默认launchSettings.json.

如果您需要在developmentDocker 上以模式运行项目,您应该更改内部配置launchSettings.json,但我认为不建议这样做,最好将模式更改为Production.

service.api:
  build:
    context: .
    dockerfile: src/Services/Service.API/Dockerfile
  environment:
    - ASPNETCORE_ENVIRONMENT=Production
    - ASPNETCORE_URLS=http://+:80;https://+:443
    - ASPNETCORE_HTTPS_PORT=5254 
    - ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword
    - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  ports:
    - "5204:80"
    - "5254:443"
  volumes:
    - ${HOME}/.aspnet/https:/https/
Run Code Online (Sandbox Code Playgroud)


Pal*_*lmi 0

事实证明这是 Visual Studio for Mac v18.1.2 中的一个错误(docker-compose up 有效)