Dockerfile位于src项目中,如何访问同解决方案下的测试项目并执行用例
问题分析与解决
错误原因
Docker构建镜像时,只能访问构建上下文目录内的文件。你的Dockerfile位于src目录,若你在src目录下执行docker build,此时构建上下文是src,../test属于上下文之外的路径,Docker无权访问,所以报错找不到/test。
解决方案
1. 调整构建命令的上下文
切换到解决方案根目录(即包含src和test的上级目录)执行构建命令,同时指定Dockerfile的路径:
docker build -t your-image-name -f src/Dockerfile .
这里的.代表把当前根目录作为构建上下文,这样Docker就能访问到test和src两个目录。
2. 修改Dockerfile内容
调整COPY路径,添加测试执行步骤,修正冗余的COPY操作:
############# FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env WORKDIR /app # 复制测试项目目录(此时上下文是根目录,直接用test路径) COPY test ./test # 复制主项目目录 COPY src ./src # 分别还原主项目和测试项目的依赖 RUN dotnet restore "./src/src.csproj" -s "https://api.nuget.org/v3/index.json" RUN dotnet restore "./test/test.csproj" -s "https://api.nuget.org/v3/index.json" # 执行测试用例 RUN dotnet test "./test/test.csproj" --no-restore # 后续可按需添加主项目构建、发布步骤 # RUN dotnet build "./src/src.csproj" -c Release -o /app/build # ...
3. 关键注意点
- 禁止在
src目录下执行构建,必须将上下文设为包含test和src的根目录。 - 避免重复执行
COPY . /app,这会覆盖之前复制的文件,还会增加镜像体积。 - 先还原依赖再执行测试,确保测试能找到所有必要的NuGet包。
内容的提问来源于stack exchange,提问作者user1954888
相关产品推荐
相关产品推荐

