如何在私有 docker 镜像中运行脚本
Posted
技术标签:
【中文标题】如何在私有 docker 镜像中运行脚本【英文标题】:How to run a script inside a private docker image 【发布时间】:2020-12-04 03:22:14 【问题描述】:我们目前正在使用 CircleCI 运行我们的自动化测试,并希望迁移到 Azure DevOps 以在 Azure Pipeline 上运行这些测试。我们的应用程序已完全 docker 化,我无法在 Azure Pipeline 上的容器中执行测试。
我的目标只是构建映像,将其推送到我们的 Docker Hub 存储库,然后将其拉取以执行 phpUnit。第一部分没问题,我成功推送了图片。
然后我创建了一个作业来执行一个简单的脚本,我希望它在容器内运行。我的管道配置文件将随之而来。当前失败的步骤是第二个作业的容器初始化。它失败并出现错误:
/usr/bin/docker pull [已编辑]:azure-master 来自守护进程的错误响应:拒绝 [redacted] 的拉取访问,存储库不存在或可能需要“docker login”:拒绝:请求的资源访问被拒绝
trigger:
- master
resources:
- repo: self
stages:
- stage: Build
displayName: Build image
jobs:
- job: Build_and_push
displayName: Build and push image
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Docker@2
displayName: Build and push image
inputs:
containerRegistry: 'Docker Hub'
repository: '[redacted]'
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
tags: 'azure-$(Build.SourceBranchName)'
- task: Docker@2
displayName: Login to docker repo
inputs:
containerRegistry: 'Docker Hub'
command: 'login'
- job: Install_composer_and_run_tests
dependsOn: ['Build_and_push']
pool:
vmImage: 'ubuntu-latest'
container: [redacted]:azure-$(Build.SourceBranchName)
steps:
- task: Docker@2
displayName: Login to docker repo
inputs:
containerRegistry: 'Docker Hub'
command: 'login'
- script: composer install -n --prefer-dist
- script: php vendor/bin/phpunit tests/ --group me
我真的不明白我应该如何或在哪里登录,因为我在工作中使用container
参数,而不是拉取图像的任务。另外,即使我没有在该步骤明确登录,我也没有问题推送图像。最后一件事是,我使用我的凭据在 Azure DevOps (Docker Hub
) 中创建了一个容器注册表,它可以正常工作。
感谢您的帮助:)
【问题讨论】:
谢谢,您的回答帮助我完成了工作!抱歉,我自己的回复延迟了。 【参考方案1】:见Endpoints:
容器可以托管在 Docker Hub 以外的注册表上。若要在 Azure 容器注册表或其他专用容器注册表上托管映像,请将服务连接添加到专用注册表。然后你可以在容器规范中引用它:
container:
image: xxx/xxx:tag
endpoint: xxx
根据您的错误消息,您可能需要为Initialize Containers
步骤提供凭据。所以我们应该使用这种格式:
- job: Install_composer_and_run_tests
dependsOn: ['Build_and_push']
pool:
vmImage: 'ubuntu-latest'
container:
image: [redacted]:azure-$(Build.SourceBranchName)
endpoint: 'Docker Hub'
steps:
...
【讨论】:
以上是关于如何在私有 docker 镜像中运行脚本的主要内容,如果未能解决你的问题,请参考以下文章