从一个注册表构建映像,推送到不同的 ACR 注册表

问题描述 投票:0回答:2

由于我的 CI/CD 管道遇到了 dockerhubs 节流 (

429 - too many requests
),我尝试在一个步骤中构建一个映像(基础映像来自 dockerhub),并在另一步骤中将该映像推送到我的 ACR,但我始终在运行进入这个错误

An image does not exist locally with the tag: ***/myimage.

我的管道:

    - task: Docker@2
      displayName: 'Build image'
      inputs:
        containerRegistry: '$(container.registry_dockerhub)'
        repository: '$(container.name)'
        Dockerfile: '**/Dockerfile'
        command: 'build'
        tags: |
          latest
          $(projectversion)
        arguments: --build-arg PIP_EXTRA_INDEX_URL=$(PIP_EXTRA_INDEX_URL)
    - task: Docker@2
      displayName: 'Push image'
      inputs:
        containerRegistry: '$(container.registry_acr)'
        repository: '$(container.name)'
        command: 'push'
        tags: |
          latest
          $(projectversion)

如何构建我的管道以使此推送发挥作用?

azure-devops azure-pipelines azure-container-registry
2个回答
0
投票

当您推送到 ACR 时,Docker 期望映像具有与您的 ACR 端点关联的标签。

尝试这个管道:

    - task: Docker@2
  displayName: 'Login to DockerHub'
  inputs:
    containerRegistry: '$(container.registry_dockerhub)'

- task: Docker@2
  displayName: 'Build and tag image'
  inputs:
    containerRegistry: '$(container.registry_dockerhub)'
    repository: '$(container.name)'
    Dockerfile: '**/Dockerfile'
    command: 'buildAndPush'
    tags: |
      latest
      $(projectversion)
    arguments: --build-arg PIP_EXTRA_INDEX_URL=$(PIP_EXTRA_INDEX_URL)
    addPipelineData: false # Ensures that metadata from the pipeline is not added.

- task: Docker@2
  displayName: 'Tag image for ACR'
  inputs:
    containerRegistry: '$(container.registry_acr)'
    repository: '$(container.name)'
    command: 'tag'
    tags: |
      latest
      $(projectversion)
    arguments: |
      $(container.registry_acr)/$(container.name):latest
      $(container.registry_acr)/$(container.name):$(projectversion)

- task: Docker@2
  displayName: 'Push image to ACR'
  inputs:
    containerRegistry: '$(container.registry_acr)'
    repository: '$(container.name)'
    command: 'push'
    tags: |
      latest
      $(projectversion)

0
投票

使用授权的registry构建Docker镜像时,构建的镜像的全名将包含registry的服务器名称。例如,

docker.io/{namespace}/{repository}:{tag}
表示授权的 Docker Hub,
{acr-name}.azurecr.io/{repository}:{tag}
表示授权的 ACR。

您无法将 Docker Hub 授权的镜像直接推送到 ACR 或其他注册中心。

© www.soinside.com 2019 - 2024. All rights reserved.