You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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移动到解决方案根目录

  1. 把AccountsProject目录下的Dockerfile移动到解决方案根目录(与Accounts.sln同级)
  2. 保留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"]
  1. 在解决方案根目录执行构建命令:
docker build --no-cache -t acc .

内容的提问来源于stack exchange,提问作者Mohammad Fathi Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:32:43