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?
我还能做些什么来排除故障以找到问题?
不久前我遇到了你的问题,这就是我解决它的方法。您需要指定--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?
默认情况下,ASP.NET Core 绑定到:
https://localhost:5001(当存在本地开发证书时)
更新1:
根据您的 docker-compose 配置,您已设置ASPNETCORE_ENVIRONMENT为Development. 我认为您应该将其更改为,Production因为当您启用时Development将从ASP.NET Core中读取设置launchSettings.json。
开发环境可以启用不应在生产中公开的功能。例如,ASP.NET Core 模板在开发环境中启用开发人员异常页面。
本机开发的环境可以在项目的Properties\launchSettings.json文件中设置。launchSettings.json 中设置的环境值会覆盖系统环境中设置的值。
据我记得,默认端口是Kestrel,80并且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)
| 归档时间: |
|
| 查看次数: |
16445 次 |
| 最近记录: |