由于我的 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)
如何构建我的管道以使此推送发挥作用?
当您推送到 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)
使用授权的registry构建Docker镜像时,构建的镜像的全名将包含registry的服务器名称。例如,
docker.io/{namespace}/{repository}:{tag}
表示授权的 Docker Hub,{acr-name}.azurecr.io/{repository}:{tag}
表示授权的 ACR。
您无法将 Docker Hub 授权的镜像直接推送到 ACR 或其他注册中心。