为什么docker build的bash脚本生成的$VSS_NUGET_EXTERNAL_FEED_ENDPOINTS JSON损坏
问题根因
- 本地
./pat文件末尾存在多余的换行、回车符(Windows系统创建的文件默认会带\r\n换行符),读取后直接拼接JSON会导致格式错位。 - 你在独立RUN指令中export的环境变量仅对当前RUN的shell会话生效,后续执行
dotnet restore的RUN指令无法读取该变量,即便JSON格式正确也会导致私有源认证失败。
修复方案
将环境变量导出和dotnet restore命令合并到同一个RUN块中,同时用tr命令清除PAT内容里的换行、回车符:
# 删掉原来独立的两个RUN(导出变量的RUN和单独的dotnet restore RUN),替换为下面的内容 RUN --mount=type=secret,id=pat,dst=/pat \ export VSS_NUGET_EXTERNAL_FEED_ENDPOINTS="{\"endpointCredentials\": [{\"endpoint\":\"https://<my private feed URL>/nuget/v3/index.json\", \"username\":\"docker\", \"password\":\"$(cat /pat | tr -d '\n\r')\"}]}" \ && echo $VSS_NUGET_EXTERNAL_FEED_ENDPOINTS \ && dotnet restore "src/Discovery.Api/Discovery.Api.csproj" --configfile NuGet.Config
额外检查项
- 生成
./pat文件时建议使用echo -n "你的PAT字符串" > ./pat命令,-n参数会禁止自动追加末尾换行符。 - 执行docker build前确保Buildkit功能已开启,Windows PowerShell中可先执行
$env:DOCKER_BUILDKIT=1再运行build命令。
内容的提问来源于stack exchange,提问作者sezmeralda
相关产品推荐
相关产品推荐

