首页 > 解决方案 > 在 Azure DevOps 中运行 docker 容器

问题描述

我最近在尝试使用 Trivy 为 Azure ACR 存储库中的图像实施扫描管道时遇到了问题。

我创建了到 ACR 的服务连接并尝试了命令行任务:

steps:
  - task: Docker@2
    inputs:
      containerRegistry: "CompanyACR"
      command: "login"
- task: CmdLine@2
    displayName: Trivy Image Scan
    inputs:    
      script: |
        echo "##[group] Image Vulnerability Scan (LOW,MEDIUM)"
        docker run \
        --rm \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v $HOME/.cache/trivy:/root/.cache/ \
        -v $(Build.SourcesDirectory)/templates/junit.tpl:/root/junit.tpl \
        -v $PWD:/work/ \
        --env GITHUB_TOKEN \
        aquasec/trivy \
        --light \
        --no-progress \
        --severity LOW,MEDIUM \
        --ignore-unfixed \
        --format template \
        --template "@/root/junit.tpl" \
        -o /work/junit-report-low-med.xml \
        $(imageName):$(tag)
        echo "##[endgroup]"

        echo "##[group] Image Vulnerability Scan (HIGH,CRITICAL)"
        docker run \
          --rm \
          -v /var/run/docker.sock:/var/run/docker.sock \
          -v $HOME/.cache/trivy:/root/.cache/ \
          -v $(Build.SourcesDirectory)/templates/junit.tpl:/root/junit.tpl \
          -v $PWD:/work/ \
          --env GITHUB_TOKEN \
          aquasec/trivy \
          --light \
          --no-progress \
          --severity HIGH,CRITICAL \
          --ignore-unfixed \
          --format template \
          --template "@/root/junit.tpl" \
          -o /work/junit-report-high-crit.xml \
          $(imageName):$(tag)
        echo "##[endgroup]"

我收到以下错误:

2021-07-01T15:59:24.614Z 致命扫描错误:无法初始化扫描仪:无法初始化 docker 扫描仪:发生 3 个错误:* 无法检查图像(/azure-vote:v1):错误:没有这样的图片:/azure-vote:v1 * 无法初始化 Podman 客户端:找不到 podman 套接字:stat podman/podman.sock:没有这样的文件或目录 * GET https:// /oauth2/token?scope=repository%3Aazure-vote %3Apull&service= : UNAUTHORIZED: 需要身份验证,请访问 https://aka.ms/acr/authorization了解更多信息。

我可以在没有登录的情况下重现从 az 运行的类似错误。我也尝试了 Docker 任务,但结果相同:

steps:
  - task: Docker@2
    inputs:
      containerRegistry: "CompanyACR"
      command: "login"

  - task: Docker@2
    inputs:
      containerRegistry: 'CompanyACR'
      repository: $(imageName)
      tags: $(tag)
      command: 'run'
      arguments: >
        --rm 
        -v /var/run/docker.sock:/var/run/docker.sock 
        -v "/home/vsts/.cache/trivy:/root/.cache/" 
        -v $(Build.SourcesDirectory)/templates/junit.tpl:/root/junit.tpl 
        -v /home/vsts/work/1/s:/work/
        aquasec/trivy 
        --light 
        --no-progress 
        --severity LOW,MEDIUM 
        --ignore-unfixed 
        --format template 
        --template "@/root/junit.tpl" 
        -o /work/junit-report-low-med.xml 
        $(imageName):$(tag)

我假设如果使用服务连接,至少 Docker Run 任务应该可以工作。知道为什么我会遇到身份验证错误以及如何使其正常工作。

没有 docker 的标准配置可以正常工作:

steps:
- script: |
    sudo apt-get install rpm
    wget https://github.com/aquasecurity/trivy/releases/download/v$(trivyVersion)/trivy_$(trivyVersion)_Linux-64bit.deb
    sudo dpkg -i trivy_$(trivyVersion)_Linux-64bit.deb
    trivy -v
  displayName: 'Download and install Trivy'

- task: Docker@2
  inputs:
    containerRegistry: 'CompanyACR'
    command: 'login'

- task: CmdLine@2
  displayName: "Run trivy scan"
  inputs:
    script: |
     - task: CmdLine@2
      displayName: "Run trivy scan"
      inputs:
        script: |
            trivy image --severity LOW,MEDIUM --format template --template "@templates/junit.tpl" -o junit-report-low-med.xml $(imageName):$(tag)         
            trivy image --severity HIGH,CRITICAL --format template --template "@templates/junit.tpl" -o junit-report-high-crit.xml $(imageName):$(tag)  

你可能会问我为什么要问什么时候有工作的解决方案,只是为了好奇为什么它不工作并了解 docker 容器中的身份验证。在此先感谢您提供有关如何进一步调查的任何想法...

标签: dockerazure-devopsazure-pipelines

解决方案


推荐阅读