You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:45:29