如何在私有 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 镜像中运行脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何搭建docker私有镜像仓库

如何将本地docker 镜像上传到我的私有仓库

如何检查 Docker 镜像是否存在漏洞

如何检查 Docker 镜像是否存在漏洞

Docker的私有仓库

如何上传镜像到网易蜂巢docker私有仓库