docker - 在 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 容器中的身份验证。在此先感谢您提供有关如何进一步调查的任何想法...
解决方案
推荐阅读
- python - 高斯过程回归:零均值
- asp.net-mvc - 无法将类型“System.Guid”隐式转换为“int”-asp.net mvc
- vue.js - 带有 Vuex 状态的条件列表渲染
- mysql - 当对象属性设置较早时,EntityManager 分离实体在刷新后传递到持久化
- spring-boot - PF4J Spring - 除了在配置类中声明的 bean 之外,无法加载插件中的任何组件
- javascript - React/Javscript如何循环遍历json文件并显示
- ruby-on-rails-4 - 如何使用 Ionic 4 React with Rails 执行身份验证操作
- reactjs - 反应:下一个问题出现时复选框不会取消选中
- java - SharedPreferences 在使用前不断被删除
- java - 电话号码细分(国际版)java