#docker #docker-compose #azure-devops #devops #azure-container-registry
#docker #docker-создать #azure-devops #devops #azure-container-registry
Вопрос:
При отправке контейнеров в частный реестр контейнеров Azure с помощью Docker Compose конвейер Azure DevOps возвращает следующую ошибку:
Отправка [контейнера] ([реестр] / [приложение]:последняя версия)…
Отправка относится к репозиторию [docker.io /[реестр]/[контейнер]]
отказано: запрошенный доступ к ресурсу отклонен
azure-pipeline.yml
Файл взят из примера Docker Compose, показанного в примере Microsoft Microservices eShopOnContainer, здесь:
variables:
azureContainerRegistry: myregistry
azureSubscriptionEndpoint: My Service Principle
...
task: DockerCompose@0
displayName: Compose push customer API
inputs:
containerregistrytype: Azure Container Registry
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureContainerRegistry: $(azureContainerRegistry)
dockerComposeCommand: 'push [container]'
dockerComposeFile: docker-compose.yml
qualifyImageNames: true
projectName: ""
dockerComposeFileArgs: |
TAG=$(Build.SourceBranchName)
Принцип обслуживания заключается в роли AcrPush.
Комментарии:
1. Вы пытаетесь установить доверие к содержимому для образов сборки и отправки Docker ?
2. Я использую только стандартный план для ACR в Azure, поэтому по умолчанию он отключен. Отличный крик, думал, что это могло быть оно!
3. Возможно, вы можете попробовать это. Надеюсь, это сработает.
Ответ №1:
Решение должно быть явным с именем контейнера. Документация вводит в заблуждение, поскольку, во-первых, в ней указано, что: по умолчанию это containerregistrytype
Azure Container Registry……….. по умолчанию это Azure Container Registry. Далее в примере в качестве значения для указывается Contoso azureContainerRegistry
.
Это неправильно. Вам необходимо явно установить для этого значение «Сервер входа» из Azure. Поэтому реестр должен быть «contoso.azurecr.io «. Таким образом, полный пример должен быть:
variables:
azureContainerRegistry: contoso.azurecr.io
azureSubscriptionEndpoint: Contoso
steps:
- task: DockerCompose@0
displayName: Container registry login
inputs:
containerregistrytype: Azure Container Registry
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureContainerRegistry: $(azureContainerRegistry)
Вот почему push-репозиторий, на который он ссылался, на самом деле был: docker.io (общедоступный концентратор docker) поскольку это должно быть фактически по умолчанию, что объясняет ошибку «отказано в доступе».
Комментарии:
1. Чтобы быть явным. Вам нужно не только указать полное имя сервера для входа (
contoso.azurecr.io
), вы должны указатьcontainerregistrytype: Azure Container Registry
. По умолчанию используется dockerhub, а не ACR.
Ответ №2:
У меня была аналогичная проблема из Azure
конвейера. Я пропустил добавление docker-id
в разделе репозитория.
Из Azure
, при нажатии, если используется только имя, например <repo-name>
, может не сработать. Для этого требуется полное имя репозитория, которое также включает docker-id
.
Использовать
repository: '<docker-id>/<repo-name>'
вместо
repository: '<repo-name>'
Фрагмент конвейера:
- task: Docker@2
inputs:
containerRegistry: 'service-connection-name'
repository: '<docker-id>/<repo-name>'