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

使用GitHub Secrets在Docker构建中添加私有NuGet源遇401授权问题

解决Docker构建私有NuGet源401未授权错误

1. 确保Dockerfile接收构建参数

Docker build时传入的--build-arg需要在Dockerfile中用ARG声明,否则变量无法在RUN命令中生效。修改Dockerfile:

# 先声明构建参数
ARG NUGET_AUTH_TOKEN

# 添加NuGet源时给密码加引号,防止令牌含特殊字符被shell解析
RUN dotnet nuget add source https://nuget.pkg.github.com/blah/index.json -UserName "AZ" -Password "$NUGET_AUTH_TOKEN"

RUN dotnet restore "Blah.Blah/Blah.Blah.csproj"
COPY . .
WORKDIR "/src/Blah.Blah"
RUN dotnet build "Blah.Blah.csproj" -c Release -o /app/build

2. 验证GitHub令牌权限

确认你的GitHub Secret中的NUGET_TOKEN具备read:packages权限:

  • 进入GitHub个人设置 → Developer settings → Personal access tokens
  • 找到对应令牌,勾选read:packages权限(组织包需额外确保令牌对组织有访问权限)

3. 改用NuGet.config文件(更可靠方案)

避免在Dockerfile中直接处理令牌,在项目根目录创建NuGet.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="github" value="https://nuget.pkg.github.com/blah/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <github>
      <add key="Username" value="AZ" />
      <add key="ClearTextPassword" value="%NUGET_AUTH_TOKEN%" />
    </github>
  </packageSourceCredentials>
</configuration>

修改Dockerfile,将构建参数转为环境变量后使用:

ARG NUGET_AUTH_TOKEN
ENV NUGET_AUTH_TOKEN=$NUGET_AUTH_TOKEN

COPY NuGet.config ./
RUN dotnet restore "Blah.Blah/Blah.Blah.csproj"
COPY . .
WORKDIR "/src/Blah.Blah"
RUN dotnet build "Blah.Blah.csproj" -c Release -o /app/build

4. 检查Workflow参数传递

确认Workflow中--build-arg的变量引用正确,${{ secrets.NUGET_TOKEN }}指向的Secret未过期、未被撤销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:10:03