Docker 错误NETSDK1064:找不到包DnsClient,1.2.0

Docker 错误NETSDK1064:找不到包DnsClient,1.2.0,docker,asp.net-core,dockerfile,Docker,Asp.net Core,Dockerfile,我有一个asp.net core docker映像。我上次试着建造它是在两个月前。现在,我得到一个错误的建设 有什么想法吗?Microsoft docker映像上出现了问题?在尝试发布和运行Elasticbeanstalk实例时,这也会被破坏 完整的错误日志 /usr/share/dotnet/sdk/3.1.201/Sdks/Microsoft.NET.sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5):错误NETS

我有一个asp.net core docker映像。我上次试着建造它是在两个月前。现在,我得到一个错误的建设

有什么想法吗?Microsoft docker映像上出现了问题?在尝试发布和运行Elasticbeanstalk实例时,这也会被破坏

完整的错误日志

/usr/share/dotnet/sdk/3.1.201/Sdks/Microsoft.NET.sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5):错误NETSDK1064:找不到包DnsClient,版本1.2.0。自NuGet restore之后,它可能已被删除。否则,NuGet还原可能仅部分完成,这可能是由于最大路径长度限制。[/app/BacktraderDataApi.csproj] 命令'/bin/sh-c dotnet publish-c Release-o out'返回一个非零代码:1

dockerfile

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
EXPOSE 5000
ENTRYPOINT ["dotnet", "myApp.dll"]

我有一个非常类似的问题

error MSB4018: NuGet.Packaging.Core.PackagingException: Unable to find fallback package folder '/usr/local/share/dotnet/sdk/NuGetFallbackFolder'.
我添加了
runmkdir-p/usr/local/share/dotnet/sdk/NuGetFallbackFolder

然后它走得更远了,但失败了,因为我相信它只是随SDK一起发布的

/usr/share/dotnet/sdk/3.1.201/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error NETSDK1064: Package Microsoft.EntityFrameworkCore.Analyzers, version 3.1.1 was not found. It might have been deleted since NuGet restore. Otherwise, NuGet restore might have only partially completed, which might have been due to maximum path length restrictions. 
我认为带有标签3.1.201-buster,3.1-buster,3.1.201,3.1-buster,3.1.201,3.1的Docker图像已损坏

我改成了基于Ubuntu bionic的图像,它又开始工作了

USE mcr.microsoft.com/dotnet/core/sdk:3.1-bionic

对我来说,它帮助添加了一个
--无缓存标志

RUN dotnet publish -c Release -o out --no-cache

当像使用
--no cache
这样的解决方案在所有工作中都没有恢复时,它通常表示来自主机的工件被复制到构建容器中。当主机和生成容器具有不同的RID时,这可能会导致问题。在运行linux容器时,这通常会发生在Windows计算机上。.NET Core Docker示例建议使用a以避免用DockerFile覆盖bin和obj目录。

基于在上发布的关于同一问题的信息以及此处的信息,我尝试了以下方法:

  • dotnet新网站
  • 编辑csproj并添加以下内容:
  • 创建了以下文件
  • docker build——pull-t测试。

  • Dockerfile没有问题地生成。您能尝试一下这些步骤并报告结果吗?

    在阅读此链接后,我也遇到了同样的问题

    我刚刚添加了
    /restore
    来构建命令,它成功了

    就这样

    RUN dotnet publish --no-restore -c Release -o /app --no-cache /restore
    

    现在它工作得很好。

    如果注释掉“运行dotnet restore”,图像将生成。这是一个最准确的答案。正如下面的回答中提到的,只需确保
    .dockrignore
    文件正确忽略bin和obj目录。
    # https://hub.docker.com/_/microsoft-dotnet-core
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
    WORKDIR /source
    
    # copy csproj and restore as distinct layers
    COPY *.csproj .
    RUN dotnet restore
    
    # copy and publish app and libraries
    COPY . .
    RUN dotnet publish -c release -o /app --no-restore
    
    
    # final stage/image
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
    WORKDIR /app
    COPY --from=build /app ./
    ENTRYPOINT ["dotnet", "aspnetapp.dll"]
    
    # directories
    **/bin/
    **/obj/
    **/out/
    
    # files
    Dockerfile*
    **/*.trx
    **/*.md
    **/*.ps1
    **/*.cmd
    **/*.sh
    
    RUN dotnet publish --no-restore -c Release -o /app --no-cache /restore