Docker构建.NET镜像报错:当前工作目录无项目/解决方案文件
问题描述
构建Docker镜像时出现如下报错:
Specify a project or solution file. The current working directory does not contain a project or solution file.
报错截图:
该截图同时包含执行的Docker命令信息。
项目目录结构:src文件夹存放项目代码,.sln解决方案文件位于src文件夹外层(代码仓库根目录),结构截图如下:
当前Azure DevOps流水线中负责构建、推送镜像的deployment.yaml配置如下:
name: test run jobs: - job: Job_1 displayName: Agent job 1 pool: vmImage: ubuntu-18.04 steps: - checkout: self - task: Docker@0 displayName: Build an image inputs: azureSubscription: 'sc-abc' azureContainerRegistry: loginServer: acr.azurecr.io id: "/subscriptions/4f76bb2f-c521-45d1-b311-xxxxxxxxxx/resourceGroups/eus-abc-rg/providers/Microsoft.ContainerRegistry/registries/acr" imageName: acr.azurecr.io/ims-abc/dotnetapi:jp26052022v8 - task: Docker@0 displayName: Push an image inputs: azureSubscription: 'sc-abc' azureContainerRegistry: '{"loginServer":"acr.azurecr.io", "id" : "/subscriptions/4f76bb2f-c521-45d1-b311-xxxxxxxxxx/resourceGroups/eus-icndp-rg/providers/Microsoft.ContainerRegistry/registries/acr"}' action: Push an image
问题根因
Docker构建默认以命令执行目录作为构建上下文,当前流水线Docker任务未显式指定构建上下文,默认使用src目录作为工作目录,而.sln解决方案文件存放在src的上级目录,构建过程中无法检索到解决方案文件,因此触发报错。
调整方案
修改Docker@0任务配置,显式指定构建上下文为仓库根目录(即.sln文件所在位置),同时明确标注Dockerfile的相对路径,修改后完整配置如下:
name: test run jobs: - job: Job_1 displayName: Agent job 1 pool: vmImage: ubuntu-18.04 steps: - checkout: self - task: Docker@0 displayName: Build an image inputs: azureSubscription: 'sc-abc' azureContainerRegistry: loginServer: acr.azurecr.io id: "/subscriptions/4f76bb2f-c521-45d1-b311-xxxxxxxxxx/resourceGroups/eus-abc-rg/providers/Microsoft.ContainerRegistry/registries/acr" imageName: acr.azurecr.io/ims-abc/dotnetapi:jp26052022v8 # 替换为你的Dockerfile相对于仓库根目录的实际路径 dockerFile: 'src/[你的项目文件夹名]/Dockerfile' # 指定构建上下文为仓库根目录,即.sln文件所在层级 buildContext: '.' - task: Docker@0 displayName: Push an image inputs: azureSubscription: 'sc-abc' azureContainerRegistry: '{"loginServer":"acr.azurecr.io", "id" : "/subscriptions/4f76bb2f-c521-45d1-b311-xxxxxxxxxx/resourceGroups/eus-icndp-rg/providers/Microsoft.ContainerRegistry/registries/acr"}' action: Push an image # 推送任务配置与构建任务对齐,避免找不到本地构建产物 dockerFile: 'src/[你的项目文件夹名]/Dockerfile' buildContext: '.'
校验项
- 将配置中
dockerFile字段的路径替换为你项目中Dockerfile的实际相对路径 - 同步检查Dockerfile内部的
COPY、dotnet restore、dotnet publish等命令的路径,确保路径相对于新的构建上下文(仓库根目录)是正确的,避免出现层级错误。
内容的提问来源于stack exchange,提问作者SmartestVEGA
相关产品推荐
相关产品推荐

