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

ASP.NET Core 6 Web API多依赖Dockerfile构建问题咨询

ASP.NET Core 6 Web API Docker构建路径错误问题排查与解决

问题场景

尝试为依赖Domain和Application项目的ASP.NET Core 6 Web API构建部署镜像,当前Dockerfile配置如下:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 8443
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["QueryHub.API.csproj", "API/src/"]
COPY ["../../Application/src/QueryHub.Application.csproj", "Application/src/"]
COPY ["../../Domain/src/QueryHub.Domain.csproj", "Domain/src/"]
RUN dotnet restore "API/src/QueryHub.API.csproj"
COPY . .
WORKDIR "/src/API/src"
RUN dotnet build "QueryHub.API.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "QueryHub.API.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENV ASPNETCORE_ENVIRONMENT Development

ENTRYPOINT ["dotnet", "QueryHub.API.dll"]

构建错误信息

=> CACHED [base 2/2] WORKDIR /app                                                                                                                                    0.0s
 => CACHED [final 1/2] WORKDIR /app                                                                                                                                   0.0s
 => CACHED [build 2/9] WORKDIR /src                                                                                                                                   0.0s
 => CACHED [build 3/9] COPY [QueryHub.API.csproj, API/src/]                                                                                                           0.0s
 => ERROR [build 4/9] COPY [../../Application/src/QueryHub.Application.csproj, Application/src/]                                                                      0.0s
 => ERROR [build 5/9] COPY [../../Domain/src/QueryHub.Domain.csproj, Domain/src/]                                                                                     0.0s
------
 > [build 4/9] COPY [../../Application/src/QueryHub.Application.csproj, Application/src/]:
------
------
 > [build 5/9] COPY [../../Domain/src/QueryHub.Domain.csproj, Domain/src/]:
------
Dockerfile:11
--------------------
   9 |     COPY ["QueryHub.API.csproj", "API/src/"]
  10 |     COPY ["../../Application/src/QueryHub.Application.csproj", "Application/src/"]
  11 | >>> COPY ["../../Domain/src/QueryHub.Domain.csproj", "Domain/src/"]
  12 |     RUN dotnet restore "API/src/QueryHub.API.csproj"
  13 |     COPY . .
--------------------
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref 066d5801-db14-4bdf-93e4-426029f9558a::fh78pkkcdx5om457jxic3fc1y: "/Domain/src/QueryHub.Domain.csproj": not found

项目目录结构

src
   API
      src
        QueryHub.API.csproj
        Dockerfile
      tests
   Domain
        src
        QueryHub.Domain.csproj
   Application
        src
        QueryHub.Application.csproj
   Worker

问题原因

Docker构建时的上下文目录是核心限制:若你在src/API/src目录下执行docker build,此时Docker的上下文根目录就是该目录,COPY指令中使用的../../Application这类相对路径会试图访问上下文目录之外的文件,而Docker守护进程只能读取构建命令指定的上下文目录及其子目录内的文件,因此会出现文件找不到的错误。

解决方法

方法1:迁移Dockerfile到项目根目录(推荐)

  1. 将src/API/src/Dockerfile移动到src目录下,修改Dockerfile中的COPY路径:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 8443
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["API/src/QueryHub.API.csproj", "API/src/"]
COPY ["Application/src/QueryHub.Application.csproj", "Application/src/"]
COPY ["Domain/src/QueryHub.Domain.csproj", "Domain/src/"]
RUN dotnet restore "API/src/QueryHub.API.csproj"
COPY . .
WORKDIR "/src/API/src"
RUN dotnet build "QueryHub.API.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "QueryHub.API.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENV ASPNETCORE_ENVIRONMENT Development

ENTRYPOINT ["dotnet", "QueryHub.API.dll"]
  1. 在src目录下执行构建命令:
docker build -t queryhub-api .

方法2:指定构建上下文(保留原Dockerfile位置)

若不想移动Dockerfile,执行构建时指定上下文为src目录,同时用-f参数指定Dockerfile的具体路径:

docker build -t queryhub-api -f API/src/Dockerfile .

同时需要修改Dockerfile中的COPY路径(因为上下文是src目录,路径需调整为相对src的位置):

# 原路径:COPY ["QueryHub.API.csproj", "API/src/"]
COPY ["API/src/QueryHub.API.csproj", "API/src/"]
# 原路径:COPY ["../../Application/src/QueryHub.Application.csproj", "Application/src/"]
COPY ["Application/src/QueryHub.Application.csproj", "Application/src/"]
# 原路径:COPY ["../../Domain/src/QueryHub.Domain.csproj", "Domain/src/"]
COPY ["Domain/src/QueryHub.Domain.csproj", "Domain/src/"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:26:03