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

.NET 6项目Docker构建失败:COPY找不到Db项目文件的解决办法

解决.NET 6 Docker构建中找不到MyProject.Db.csproj的问题

你的项目结构如下:

TestProject
 - MyProject.sln
 - docker-compose.yaml
 - MyProject/
    - MyProject.csproj
    - Dockerfile
 - MyProject.Db/
     - MyProject.Db.csproj   

构建时出现错误:

ERROR  [app build 4/8] COPY [/MyProject.Db/MyProject.Db.csproj, MyProject.Db/]:
------
failed to solve: failed to compute cache key: failed to calculate checksum of ref 9dfeae07-144f-4a1a-9a88-4816eb08f9d9::p80g09cb0geba6x3tewswlfug: "/MyProject.Db/MyProject.Db.csproj": not found

问题根源:当前docker-compose.yaml中app服务的构建上下文设为./MyProject,导致Dockerfile执行时无法访问上层目录的MyProject.Db文件夹。

解决方案(无需移动Dockerfile)

步骤1:修改docker-compose.yaml的app服务构建配置

将app服务的构建上下文改为项目根目录,并指定Dockerfile的完整路径:

version: '3.8'

services:
  database:
    build:
      context: ./MyProject.Db
      dockerfile: Dockerfile
    ports:
      - "1433:1433"

  app:
    build:
      context: .  # 改为项目根目录作为构建上下文
      dockerfile: MyProject/Dockerfile  # 指定Dockerfile的位置
    ports:
      - "8080:80"
    depends_on:
      - database

步骤2:调整Dockerfile中的COPY命令

由于构建上下文变为根目录,需要修改文件路径以正确复制项目文件:

# Stage 1: Base Image with ASP.NET runtime
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# Stage 2: Build Image with SDK for compiling the application
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
# 从根上下文复制两个项目的csproj文件
COPY ["MyProject/MyProject.csproj", "MyProject/"]
COPY ["MyProject.Db/MyProject.Db.csproj", "MyProject.Db/"]

RUN dotnet restore "MyProject/MyProject.csproj"
WORKDIR "/src/MyProject"
# 只复制MyProject目录下的文件到当前工作目录
COPY ["MyProject/", "."]
RUN dotnet build "MyProject.csproj" -c Release -o /app/build

# Stage 3: Publish Image for a smaller runtime image
FROM build AS publish
RUN dotnet publish "MyProject.csproj" -c Release -o /app/publish /p:UseAppHost=false

# Stage 4: Final Image with only necessary artifacts
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyProject.dll"]

原理说明

  • 将构建上下文改为项目根目录后,Docker可以访问所有子目录的文件,包括MyProject.Db。
  • 调整COPY命令的路径,确保从根上下文正确复制所需文件,同时避免复制不必要的目录。

内容的提问来源于stack exchange,提问作者HC1122

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:24:57