如何在Azure管道中运行Docker容器?

时间:2020-08-25 16:45:08

标签: azure docker azure-pipelines

Azure文档(https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/docker?view=azure-devops)没有指定如何在Azure管道中运行Docker容器。 我们可以使用Docker @ 2任务来构建/推送docker镜像,但是它没有运行容器的命令。通过查看较旧版本的Docker任务的源代码,我可以看到有一个run命令,但是现在已经弃用了这些命令,并且找不到文档。

我还遵循了文档:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/container-phases?view=azure-devops 使用以下yaml,我能够提取先前已推送到ACR的docker映像。 (Duration是我通过项目设置添加的服务连接)

my-acr

但是我无法让容器运行。

2 个答案:

答案 0 :(得分:2)

显然,问题中提到的配置将拉出图像并在容器内运行步骤(在本例中为脚本中的printenv命令)。临时工作目录将自动挂载,并将在该目录中运行。 但是,这不会运行容器本身。 (不会执行Dockerfile中定义的CMD命令)

为了运行容器本身,我们必须使用内置Docker@2的任务登录docker Registry,然后手动执行docker run作为脚本。这是一个例子,

trigger: none

jobs:
- job: RunTest
  workspace:
    clean: all
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - task: Docker@2
    displayName: Login to ACR
    inputs:
      command: login
      containerRegistry: my-acr
  - script: |
      docker run my-registry.azurecr.io/somerepo/rnd-hello:latest 

答案 1 :(得分:1)

如果需要,您可以简单地使用shell命令来执行docker run,并在管道中的所有其他步骤中仅依赖于该命令。您无需在Pipelines中使用Docker任务即可与守护程序进行通信。

另一种解决方案是使用Azure Container Registry运行容器,但这似乎是万不得已的方法,以防管道出现问题。