ASP.NET Core多项目Docker化遇错误,求正确配置方案
解决方案
错误核心是Dockerfile的文件复制逻辑不符合.NET多项目解决方案的构建需求,同时错误使用了超出构建上下文的路径。以下是修正后的配置:
1. 修正Application.Api/Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env WORKDIR /src # 复制解决方案文件和所有项目的csproj,用于还原依赖 COPY *.sln ./ COPY Application.Api/Application.Api.csproj Application.Api/ COPY Application.SMTP/Application.SMTP.csproj Application.SMTP/ # 还原整个解决方案的所有依赖 RUN dotnet restore # 复制所有项目文件到构建环境 COPY . . # 切换到Api项目目录,执行发布 WORKDIR /src/Application.Api RUN dotnet publish -c Release -o /app/out # 构建运行时镜像 FROM mcr.microsoft.com/dotnet/aspnet:6.0 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "Application.Api.dll"]
2. 修正Application.SMTP/Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env WORKDIR /src # 复制解决方案文件和SMTP项目的csproj(如果SMTP依赖Api,需加上Api的csproj复制) COPY *.sln ./ COPY Application.SMTP/Application.SMTP.csproj Application.SMTP/ # 还原依赖 RUN dotnet restore # 复制所有项目文件 COPY . . # 切换到SMTP项目目录执行发布 WORKDIR /src/Application.SMTP RUN dotnet publish -c Release -o /app/out # 构建运行时镜像 FROM mcr.microsoft.com/dotnet/aspnet:6.0 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "Application.SMTP.dll"]
3. docker-compose.yml 保持不变
version: '3.4' services: application.smtp: image: ${DOCKER_REGISTERY-}eshopsmtp build: context: . dockerfile: Application.SMTP/Dockerfile application.api: image: ${DOCKER_REGISTERY-}eshopapi build: context: . dockerfile: Application.Api/Dockerfile
关键修正点说明
- 构建上下文对齐:docker-compose指定的构建上下文是Root目录(
context: .),所有Dockerfile中的路径都要基于Root目录编写,避免使用../这类超出上下文的无效路径。 - 分阶段复制csproj:先复制解决方案和所有依赖项目的csproj文件,单独执行
dotnet restore,既可以利用Docker镜像缓存优化构建速度,也能确保还原过程找到所有项目引用。 - 指定项目发布:切换到对应项目目录后执行
dotnet publish,确保只打包当前项目的输出文件,避免冗余。
内容的提问来源于stack exchange,提问作者Cream
相关产品推荐
相关产品推荐

