使用Docker构建.NET Core控制台应用时遇到fxr目录错误
解决Docker构建.NET控制台应用时的
fxr文件夹错误 问题详情
构建Docker镜像时,执行dotnet restore步骤失败,错误信息如下:
ERROR [build 4/7] RUN dotnet restore "./WebScrapper.csproj" 0.6s
[build 4/7] RUN dotnet restore "./WebScrapper.csproj":
#12 0.525 A fatal error occurred, the folder [/usr/share/dotnet/host/fxr] does not contain any version-numbered child folders
executor failed running [/bin/sh -c dotnet restore "./WebScrapper.csproj"]: exit code: 131
当前使用的Dockerfile:
FROM mcr.microsoft.com/dotnet/runtime:6.0-bullseye-slim-arm32v7 AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim-arm32v7 AS build WORKDIR /src COPY ["WebScrapper.csproj", "."] RUN dotnet restore "./WebScrapper.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "WebScrapper.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "WebScrapper.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "WebScrapper.dll"]
项目csproj文件:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerfileContext>.</DockerfileContext> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="HtmlAgilityPack" Version="1.11.46" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" /> </ItemGroup> </Project>
解决方法
1. 修正构建架构不匹配问题
你使用的是arm32v7架构镜像,但如果构建机器是x86_64(普通PC/服务器),Docker默认不会自动模拟ARM架构,导致SDK内部组件无法正常加载。
- 方法一:构建时指定架构参数
DOCKER_BUILDKIT=1 docker build --platform linux/arm/v7 -t webscrapper . - 方法二:在Dockerfile中明确指定平台
修改build阶段的基础镜像行:FROM --platform=linux/arm/v7 mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim-arm32v7 AS build
2. 更换稳定的SDK镜像
6.0-bullseye-slim-arm32v7镜像可能存在组件缺失,尝试使用非slim版本的SDK镜像测试:
FROM mcr.microsoft.com/dotnet/sdk:6.0-arm32v7 AS build
3. 清理Docker缓存
旧缓存镜像可能损坏,清理后重新构建:
docker system prune -a docker build --platform linux/arm/v7 -t webscrapper .
4. 精简项目依赖
移除csproj中Docker构建不需要的包引用,Microsoft.VisualStudio.Azure.Containers.Tools.Targets仅用于Visual Studio容器工具:
<ItemGroup> <PackageReference Include="HtmlAgilityPack" Version="1.11.46" /> <!-- 移除以下无用引用 --> <!-- <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" /> --> </ItemGroup>
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

