Azure Pipelines 未处理:没有 Dockerfile 匹配“/home/vsts/work/1/s/...”错误

问题描述 投票:0回答:1

我想使用 Azure Pipeline 在我的存储库中构建 .net 服务的 dockerfile。文件夹结构如下:

|-- ProjectA  
|-- |-- RepoB  
|       | -- .gitignore  
|       | -- Example.sln  
|       | -- Readme.md  
|       | -- Services  
|                 | -- ServiceC  
|                      | -- ServiceC.API  
|                           | -- Program.cs   
|                           | --     .  
|                           | --     .  
|                           | -- Dockerfile  
|                 | -- ServiceD  
|                      | -- ServiceD.API  
|                           | -- Program.cs   
|                           | --     .  
|                           | --     .  
|                           | -- Dockerfile    

当我尝试使用 Azure 管道构建上述 dockerfiles 时,出现以下错误::

[error]Unhandled: No Dockerfile matching  /home/vsts/work/1/s/Dockerfile  was found.

azure-pipelines.yml内容如下:

# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- test

resources:
- repo: self

variables:
  tag: '$(Build.BuildId)'

stages:
- stage: Build
  displayName: Build image
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: ubuntu-latest
    steps:
    - task: Docker@2
      displayName: Build an image for Lesson Service
      inputs:
        command: build
        buildContext: 'Services/ServiceC/ServiceC.API/**'
        dockerfile: 'Dockerfile'
        tags: |
          $(tag)

你能帮我解决这个错误吗?感谢您的帮助。

可以运行Yaml文件并找到Dockerfile

dockerfile yaml azure-pipelines pipeline
1个回答
0
投票

好的,简单的,

所以你有两个参数

    buildContext: 'Services/ServiceC/ServiceC.API/**'
    dockerfile: 'Dockerfile'

构建上下文是构建的基础,dockerfile 是 docker 文件的位置。

当您的管道执行该任务时,您将从 /home/vsts/work/1/s/ 执行,因此如果您删除整个存储库,您的 docker 文件路径将如下所示。

项目A/RepoB/服务/ServiceC/ServiceC.API/Dockerfile

我不会在构建上下文中使用通配符,我总是在解决方案级别设置构建上下文,但这一切都取决于 dockerfile 的构建方式。

- task: Docker@2
      displayName: Build an image for ServiceC
      inputs:
        command: build
         buildContext: 'ProjectA/RepoB/Services/Services/ServiceC'
        dockerfile: 'ProjectA/RepoB/Services/ServiceC/ServiceC.API/Dockerfile'

然后您将为下一个 dockerfile 执行第二个任务

- task: Docker@2
      displayName: Build an image for ServiceD 
      inputs:
        command: build
         buildContext: 'ProjectA/RepoB/Services/Services/ServiceD'
        dockerfile: 'ProjectA/RepoB/Services/ServiceD/ServiceD.API/Dockerfile'
© www.soinside.com 2019 - 2024. All rights reserved.