.NET API Docker部署仅暴露80端口且提示‘The 'file' scheme is not supported’
问题描述
使用下述Dockerfile部署.NET API时,服务仅暴露80端口,且出现提示信息The 'file' scheme is not supported;但通过Visual Studio运行该Dockerfile时,服务可正常暴露443端口并运行。
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 ["RECashMachineBackend/RECashMachineBackend.csproj", "RECashMachineBackend/"] COPY ["RECashMachineBackend.Repository/RECashMachineBackend.Repository.csproj", "RECashMachineBackend.Repository/"] COPY ["RECashMachineBackend.Models/RECashMachineBackend.Models.csproj", "RECashMachineBackend.Models/"] COPY ["RECashMachineBackend/nuget.config", ""] # COPY ["*.props", "./"] # ARG PAT=localhost # RUN sed -i "s|</configuration>|<packageSourceCredentials><Techdome.Identity><add key=\"Username\" value=\"PAT\" /><add key=\"ClearTextPassword\" value=\"${PAT}\" /></Techdome.Identity></packageSourceCredentials></configuration>|" nuget.config RUN dotnet restore "RECashMachineBackend/RECashMachineBackend.csproj" --configfile "./nuget.config" COPY . . WORKDIR "/src/RECashMachineBackend" RUN dotnet build "RECashMachineBackend.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "RECashMachineBackend.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "RECashMachineBackend.dll"]
解决方案
一、修复HTTPS端口暴露问题
Visual Studio运行Docker时会自动注入HTTPS相关环境变量和证书映射,手动部署时需显式配置:
- 在
final阶段添加HTTPS环境变量,指定证书路径和端口:FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # 添加HTTPS配置环境变量 ENV ASPNETCORE_URLS="https://+;http://+" ENV ASPNETCORE_HTTPS_PORT=443 ENV ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx ENV ASPNETCORE_Kestrel__Certificates__Default__Password="your-cert-password" # 挂载本地证书目录 VOLUME ["/https"] ENTRYPOINT ["dotnet", "RECashMachineBackend.dll"] - 启动容器时挂载本地证书目录并传递密码参数:
docker run -d -p 80:80 -p 443:443 -v /your-local-cert-folder:/https -e ASPNETCORE_Kestrel__Certificates__Default__Password="your-cert-password" your-image-tag
二、解决The 'file' scheme is not supported错误
这个错误大多是因为应用尝试访问本地文件系统路径,但容器内路径无效,或者配置里用了file://协议的资源但容器内无法访问:
- 检查
appsettings.json等配置文件,确认是否有指向本地文件的配置项,替换成容器内可访问的路径,或者改用其他存储方式 - 如果是证书路径问题,确保容器内证书路径和环境变量配置一致,且文件确实存在
- 发布时确认必要的静态文件、配置文件已经正确复制到
/app/publish目录
内容的提问来源于stack exchange,提问作者Punit kumar
相关产品推荐
相关产品推荐

