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

Docker构建.NET6项目报错NU1301 本地NuGet源不存在如何修复

问题根因

报错来自两个核心问题:

  1. 你用的mcr.microsoft.com/dotnet/sdk:6.0默认是Linux镜像,Linux根本不识别Windows的C:\盘符、\\开头的SMB共享路径格式。dotnet restore读到这类不符合Linux路径规则的地址时,会默认把它当成相对路径,直接拼在当前工作目录/src后面,自然就生成了/src/C:\Users\...这种不存在的错误路径。
  2. 容器本身是隔离环境,默认既不会挂载你宿主机的C盘目录,也不会直接继承宿主机的局域网共享访问权限,就算你把路径格式改成Linux能识别的,容器里也访问不到你Windows本机的文件夹和内网SMB共享。
修复方案

按实际场景选以下方案即可:

方案1:构建时显式指定可用源(最推荐,不影响本地开发配置)

直接修改Dockerfile里的restore命令,显式指定容器内能访问的包源,跳过本地NuGet.Config里的Windows专属源即可。把原Dockerfile里的:

RUN dotnet restore "TeamService/TeamService.csproj"

替换为:

RUN dotnet restore "TeamService/TeamService.csproj" -s https://api.nuget.org/v3/index.json

如果有容器网络能访问到的内部NuGet服务,直接追加多个-s 源地址参数就行。
这个方案完全不影响你本地Windows开发时用本地文件夹、SMB共享作为包源,只有Docker构建过程会走指定的公网/内部HTTP源。

方案2:单独给Docker构建准备NuGet配置

如果需要长期维护Docker构建配置,可以在解决方案目录新建一个NuGet.Docker.config文件,里面只保留容器内可访问的包源:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
        <!-- 仅添加容器网络可达的HTTP/HTTPS协议NuGet源,不要加Windows本地路径、SMB路径 -->
    </packageSources>
</configuration>

然后修改Dockerfile里复制配置、执行restore的步骤:

COPY ["TeamService/TeamService.csproj", "TeamService/"]
# 用Docker专用的NuGet配置替换原配置
COPY ./NuGet.Docker.Config ./NuGet.Config
RUN dotnet restore "TeamService/TeamService.csproj" --configfile ./NuGet.Config

方案3:临时测试需要用到本地nupkg包(仅临时用,不推荐生产配置)

如果构建时必须用到你本地文件夹里的nupkg包,需要先把包放到Docker构建上下文目录内,复制进镜像后用相对路径引用:

  1. 把C:\Users\dominik.essenhofer\Documents\Local Nuget Packages下的所有包复制到解决方案目录下新建的local-nuget文件夹
  2. 修改Dockerfile的restore相关步骤:
COPY ["TeamService/TeamService.csproj", "TeamService/"]
# 复制本地包目录到镜像内
COPY ./local-nuget ./local-nuget
RUN dotnet restore "TeamService/TeamService.csproj" -s ./local-nuget -s https://api.nuget.org/v3/index.json

注意:\\vierepo01\ucPackageStore\net-core这类Windows SMB共享路径无法直接在Linux容器内访问,要么把共享里的包提前复制到构建上下文,要么把SMB共享配置成可HTTP访问的NuGet源,否则容器内无法拉取上面的包。

额外建议

不要把你本机专属的绝对路径包源写在解决方案级的NuGet.Config里提交到仓库,这类本地路径应该配置在你本机的用户级NuGet配置中,否则其他开发人员、CI/CD流水线、Docker构建都会因为路径不存在触发同类报错。


内容的提问来源于stack exchange,提问作者CoffeeOrc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:57:29