如何在 Azure 管道中运行 docker 容器?
Posted
技术标签:
【中文标题】如何在 Azure 管道中运行 docker 容器?【英文标题】:How to run a docker container in Azure pipeline? 【发布时间】:2020-12-14 10:05:09 【问题描述】:Azure 文档 (https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/docker?view=azure-devops) 未指定如何在 Azure 管道中运行 docker 容器。 我们可以使用 Docker@2 任务来构建/推送 docker 镜像,但它没有运行容器的命令。通过查看旧版本 Docker 任务的源代码,我可以看到有一个运行命令,但现在已弃用,并且找不到任何文档。
我也关注了文档:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/container-phases?view=azure-devops
使用以下 yaml,我能够提取之前推送到 ACR 的 docker 映像。
(my-acr
是我通过项目设置添加的服务连接)
pool:
vmImage: 'ubuntu-16.04'
container:
image: somerepo/rnd-hello:latest
endpoint: my-acr
steps:
- script: printenv
但我无法让容器运行。
【问题讨论】:
使用Docker@1任务怎么样? 下面的回复有用吗?你的问题解决了吗? 【参考方案1】:显然问题中提到的配置将拉取图像并在容器内运行步骤(在本例中为脚本中的printenv
命令)。将自动挂载一个临时工作目录,并将在该目录中运行。
但是,这不会运行容器本身。 (不会执行Dockerfile中定义的CMD
命令)
为了运行容器本身,我们必须使用 Docker@2
内置任务登录到 docker 注册表,然后手动将 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
【讨论】:
【参考方案2】:如果您愿意,您可以简单地使用 shell 命令来执行 docker run
,然后在管道中的所有进一步步骤中简单地依赖它。您无需在 Pipelines 中使用 Docker 任务即可与守护进程通信。
另一种解决方案是使用 Azure Container Registry 来运行容器,但如果 Pipelines 出现问题,这似乎是最后的手段。
【讨论】:
我尝试将docker run somerepo/rnd-hello:latest
添加到脚本部分。但它无法识别docker
命令。
@tharinduwijewardane 您之前尝试过添加 Docker CLI 安装程序步骤吗?
不,我添加了那一步,谢谢。我想我也必须进行 docker 登录。我跑了一个ls
并没有看到之前拉的图像。有没有办法使用服务器连接?还是我必须登录提供凭据?
图像仅在每次代理运行时可用 - 它们是短暂的,因此获取的图像不会被保留。是的,您可能需要运行 docker login
,具体取决于图像的来源。以上是关于如何在 Azure 管道中运行 docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Kafka 消息通过管道传输到 docker 容器中?
如何让 MSSQL 服务容器在 Azure DevOps 管道中工作?
使用 docker 和 azure 容器注册表在 azure kubernetes 中部署 Angular 和 Spring Boot 应用程序
使用 Azure DevOps 构建管道将机密传递给容器时,Docker BuildKit 返回“/run/secrets/<secret-id>:没有这样的文件或目录”