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
但是我无法让容器运行。
答案 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运行容器,但这似乎是万不得已的方法,以防管道出现问题。