如何在私有Docker映像中运行脚本

问题描述

我们当前正在使用CircleCI来运行我们的自动化测试,并希望迁移到Azure DevOps以在Azure管道上运行这些测试。我们的应用程序已完全泊坞化,在Azure Pipeline上的容器中执行测试时遇到了麻烦。

我的目标只是构建映像,将其推送到我们的Docker Hub仓库,然后将其拉出以执行PHPUnit。第一部分没问题,我设法推送了图像。

然后,我创建了一个作业来执行一个简单的脚本,并且希望它在容器内运行。我的管道配置文件将跟随。当前失败的步骤是第二个作业的容器初始化。它失败并显示错误:

/ usr / bin / docker pull [已编辑]:azure-master 来自守护程序的错误响应:[已编辑]的拉式访问被拒绝,存储库不存在或可能需要'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)中创建了一个容器注册表,并且可以正常工作。

感谢您的帮助:)

解决方法

请参见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:
      ...

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...