Docker构建多层.NET项目失败:Copy Error问题求助
解决Docker构建C#多层项目时找不到Accounts.Data目录的问题
错误原因分析
错误提示lstat /var/lib/docker/tmp/buildkit-mount30709147/Accounts.Data: no such file or directory的核心问题是构建上下文不匹配:
- 你的Dockerfile位于
AccountsProject目录下,执行docker build时指定的上下文是.(即当前所在的AccountsProject目录) - 但
Accounts.Data和Accounts.Service目录属于解决方案根目录(AccountsProject的父目录),不在当前构建上下文范围内,因此Docker无法定位到这些目录。
解决方案
方案一:调整构建命令的上下文到解决方案根目录
无需修改现有Dockerfile,直接在解决方案根目录(包含Accounts.Data、Accounts.Service、AccountsProject、Accounts.sln的目录)执行以下构建命令:
docker build --no-cache -t acc -f AccountsProject/Dockerfile .
关键说明:
- 最后的
.代表构建上下文为解决方案根目录,让Docker能访问到所有项目子目录 -f AccountsProject/Dockerfile指定Dockerfile的具体位置
方案二:将Dockerfile移动到解决方案根目录
- 把
AccountsProject目录下的Dockerfile移动到解决方案根目录(与Accounts.sln同级) - 保留Dockerfile原有内容(因为上下文已变为根目录,路径无需调整),修改后的Dockerfile如下:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src # Copy the .csproj files and restore NuGet packages COPY Accounts.Data/*.csproj Accounts.Data/ COPY Accounts.Service/*.csproj Accounts.Service/ COPY AccountsProject/*.csproj AccountsProject/ RUN dotnet restore AccountsProject/AccountsProject.csproj # Copy the entire project files and build the application COPY . . WORKDIR "/src/AccountsProject" RUN dotnet build AccountsProject.csproj -c Release -o /app/build # Publish stage FROM build AS publish RUN dotnet publish AccountsProject.csproj -c Release -o /app/publish /p:UseAppHost=false # Final stage FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS final WORKDIR /app # Copy published output from the publish stage COPY --from=publish /app/publish . # Set the entry point for the application ENTRYPOINT ["dotnet", "AccountsProject.dll"]
- 在解决方案根目录执行构建命令:
docker build --no-cache -t acc .
内容的提问来源于stack exchange,提问作者Mohammad Fathi Rahman
相关产品推荐
相关产品推荐

