c# - NuGet 恢复在 Docker 容器内停止工作
问题描述
当我尝试dotnet restore
作为构建它的RUN
指令运行Dockerfile
时,我收到以下错误:
/src/Anonymized.Tests/Anonymized.Tests.csproj : error NU3028: Package 'Microsoft.Win32.SystemEvents 5.0.0' from source 'https://api.nuget.org/v3/index.json': The author primary signature's timestamp found a chain building issue: UntrustedRoot: self signed certificate in certificate chain [/src/Anonymized.sln]
/src/Anonymized.Tests/Anonymized.Tests.csproj : error NU3037: Package 'Microsoft.Win32.SystemEvents 5.0.0' from source 'https://api.nuget.org/v3/index.json': The author primary signature validity period has expired. [/src/Anonymized.sln]
我所有的 NuGet 包都会发生这种情况。
如果我在容器外运行它,它工作得很好。
我正在使用图像mcr.microsoft.com/dotnet/sdk:5.0
。会不会是我运行它的 Docker 映像以某种方式过期了证书?
它一直工作到几个小时前。
编辑:不确定它是否是重要信息,但这都是在 Linux 中从 GitHub Actions 运行的。
解决方案
编辑:
解决方案1:
如 github 上所述,如果您的 Dockerfile 看起来与此类似:
FROM mcr.microsoft.com/dotnet/sdk:5.0
将其更改为
FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine
, 或者FROM mcr.microsoft.com/dotnet/sdk:5.0-focal
解决方案2:
在运行还原之前将其添加到您的 Dockerfile 中:
RUN curl -o /usr/local/share/ca-certificates/verisign.crt -SsL https://crt.sh/?d=1039083 && update-ca-certificates
出于安全原因,您可能需要下载并验证证书并将其保存到您的存储库中。这是验证软件包时间戳所必需的证书,它默认包含在 alpine 和 focus 中,但在 debian 中缺失。
解决方案3:
等待微软解决问题。他们在 github 上对其进行跟踪,并且 Nuget 已将其状态设置为降级,直到问题解决:https ://status.nuget.org/
原答案:
据我所知,Docker 在这种情况下是正确的。手动下载任何 NuGet 包,即:https : //www.nuget.org/api/v2/package/System.ComponentModel.Annotations/5.0.0 打开文件并查找 .signature.p7s 文件并使用默认程序。它向我显示,微软的证书在当地时间今天下午 1 点过期。
我不知道为什么这对于 docker 之外的工具来说不是问题。我知道有一种方法可以完全禁用这里解释的 NuGet 验证以及有关有效期的更多信息: https ://docs.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028 https:// /docs.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3037
我真的不想完全禁用检查。可悲的是我也不知道在这种情况下如何进行
推荐阅读
- flutter - TextField 保留旧值
- python - 如何克服 Python Requests 包产生的 412 状态?
- linear-programming - 在线性规划中使用索引进行优化
- file - 如何在 Vaadin Flow 上打开生成的文件?
- python - 如何在python中以'yyyy-mm-dd'格式添加一天?
- python - 使用 python cli 工具更改当前终端的目录
- google-sheets - 如何获取原始矩阵的每个单元格的行号矩阵?
- javascript - 在没有 push() 的情况下将模式添加到数组
- python - 如何从目标数据框中删除列,但合并中的连接需要列
- flutter - 为什么我不能在 build() 中使用 context.read,但我可以使用 Provider.of with listen: false?