我有一个asp.net核心docker映像。我上一次尝试构建它的时间是2个月前。现在,我在构建错误。
有什么想法吗? 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恢复以来,它可能已被删除。否则,NuGet恢复可能仅部分完成,这可能是由于最大路径长度限制所致。 [/app/BacktraderDataApi.csproj] 命令'/ bin / sh -c dotnet publish -c Release -o out'返回非零代码:1
dockerfile-
从只读存储器mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env WORKDIR / app
COPY * .csproj ./ 运行dotnet还原
复制。 ./ RUN dotnet发布-c发布-o out
从只读存储器mcr.microsoft.com/dotnet/core/aspnet:3.1 WORKDIR / app 复制--from = build-env / app / out。 曝光5000 ENTRYPOINT [“ dotnet”,“ myApp.dll”]
答案 0 :(得分:3)
对我来说,它有助于添加一个--no-cache flag
RUN dotnet publish -c Release -o out --no-cache
答案 1 :(得分:2)
当诸如使用--no-cache
之类的解决方案根本无法恢复时,通常表明来自主机的工件已被复制到构建容器中。当主机和构建容器具有不同的RID时,这可能会导致问题。运行Linux容器时,这通常会在Windows计算机上发生。 .NET Core Docker示例建议使用.dockerignore file来避免使用Dockerfile来处理bin和obj目录。
答案 2 :(得分:2)
基于针对同一问题在https://github.com/microsoft/containerregistry/issues/20上发布的信息以及此处的信息,我尝试了以下操作:
dotnet new web
<ItemGroup>
<PackageReference Include="MongoDB.Driver" Version="2.10.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
# 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
docker build --pull -t test .
构建的Dockerfile没有问题。您可以尝试这些步骤并报告结果吗?
答案 3 :(得分:1)
我有一个非常相似的问题
error MSB4018: NuGet.Packaging.Core.PackagingException: Unable to find fallback package folder '/usr/local/share/dotnet/sdk/NuGetFallbackFolder'.
我添加了RUN mkdir -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最新的mcr.microsoft.com/dotnet/core/sdk:3.1
Docker映像已损坏。
我更改为基于Ubuntu bionic的映像,它再次起作用。
USE mcr.microsoft.com/dotnet/core/sdk:3.1-bionic
答案 4 :(得分:0)
阅读此链接https://github.com/dotnet/sdk/issues/3059
后,我遇到了同样的问题我刚刚附加了/restore
来构建命令,它可以正常工作。
就是这样
RUN dotnet publish --no-restore -c Release -o /app --no-cache /restore
现在它可以正常工作了。