.NET 8项目Docker构建无法引用同级类库的问题求助
解决Docker子目录构建时无法复制上级项目的问题
核心问题根源
Docker构建时的上下文目录是执行docker build命令的目录(此处为MySolution.MyApi),../MySolution.Commun超出了上下文的访问范围,因此Docker无法读取该路径下的文件。
可行解决方案
方案1:临时拷贝依赖目录到构建上下文
在MySolution.MyApi目录下添加一个脚本,在docker build执行前将上级目录的MySolution.Commun复制到当前上下文的临时目录中,再让Dockerfile读取这个临时目录。
创建拷贝脚本
- Windows环境(
copy-commun.ps1):$tempDir = "./temp/MySolution.Commun" if (-not (Test-Path $tempDir)) { New-Item -ItemType Directory -Path $tempDir -Force | Out-Null } Copy-Item -Path ../MySolution.Commun/* -Destination $tempDir -Recurse -Force - Linux/macOS环境(
copy-commun.sh):mkdir -p ./temp/MySolution.Commun cp -r ../MySolution.Commun/* ./temp/MySolution.Commun/
- Windows环境(
修改Dockerfile
直接复制临时目录内的文件进行构建:FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src # 复制临时目录中的Commun项目文件 COPY ./temp/MySolution.Commun ./MySolution.Commun COPY ./MySolution.MyApi.csproj ./ RUN dotnet restore # 复制API自身代码并构建 COPY . . RUN dotnet build "MySolution.MyApi.csproj" -c Release -o /app/build # 后续发布阶段省略...协调CI团队
要求负责部署的团队在执行docker build命令前,先运行上述拷贝脚本(这是无需修改现有部署文件核心逻辑的小改动,沟通成本较低)。
方案2:调整项目目录结构(若允许)
将MySolution.Commun直接移动到MySolution.MyApi的子目录中(比如MySolution.MyApi/src/MySolution.Commun),之后Dockerfile可直接使用COPY ./src/MySolution.Commun ./src完成复制。此方案适合项目结构可调整的场景。
关键注意点
Docker的上下文隔离机制是硬性限制,无法直接读取上下文目录之外的文件,所有需要构建的文件必须先被纳入构建上下文范围。
内容的提问来源于stack exchange,提问作者Mart
相关产品推荐
相关产品推荐

