Устранение неполадок проверки подлинности Реестр контейнеров Azure
Реестр контейнеров Azure (ACR) — это служба частного реестра. Для выполнения таких операций, как отправка или вытягивание (за исключением анонимной операции извлечения ), сначала необходимо выполнить проверку подлинности в ACR.
В этой статье показано, как устранить проблемы с проверкой подлинности ACR и устранить наиболее распространенные ошибки, возникающие при извлечении образов из реестра контейнеров.
Начальные действия по устранению неполадок
Определите вариант проверки подлинности, который вы используете. После выбора воспроизводите проблему проверки подлинности, чтобы получить ошибку.
Начните устранять неполадки, проверяя работоспособность реестра контейнеров Azure.
Чтобы проверить работоспособность реестра контейнеров, выполните следующую команду:
az acr check-health --name <acr-name> --ignore-errors --yes
Если обнаружена проблема, выходные данные команды предоставляют код ошибки и описание. Дополнительные сведения об коде ошибки и возможных решениях см. в справочнике по ошибке проверки работоспособности.
Примечание.
Если возникают ошибки, связанные с Helm или Notary, это не означает, что у вас возникли проблемы, влияющие на реестр контейнеров или устройство. Он указывает только, что Helm или Notary не установлен или что Azure CLI несовместим с текущей установленной версией Helm или Нотари.
Ошибка 1. "DOCKER_COMMAND_ERROR Проверьте, установлен ли и запущен клиент Docker".
Ниже приведен пример сведений об ошибке:
You may want to use 'az acr login -n <acr-name> --expose-token' to get an access token, which does not require Docker to be installed.
<date and time> An error occurred: DOCKER_COMMAND_ERROR
Please verify if Docker client is installed and running.
Решение 1. Убедитесь, что Docker установлен
Команда az acr login
вызывает docker login
команду и использует маркер доступа Microsoft Entra для проверки подлинности в ACR. Для этого требуется, чтобы клиент Docker и управляющая программа Docker были установлены на компьютере, где выполняется команда. Сведения об установке Docker см. в разделе "Установка подсистемы Docker".
Решение 2. Используйте команду az acr login с параметром "--expose-token"
Если управляющая программа Docker не выполняется в вашей среде, если необходимо выполнить проверку подлинности с помощью ACR, используйте команду az acr login с параметром токена --expose-token. Эта команда полезна при выполнении скриптов, которые не требуют управляющей программы Docker, но только интерфейса командной строки Docker (например, при использовании Azure Cloud Shell).
Ошибка 2. "Для выполнения этой команды требуется запуск управляющей программы Docker, которая не поддерживается в Azure Cloud Shell".
Ниже приведен пример сведений об ошибке:
This command requires running the docker daemon, which is not supported in Azure Cloud Shell. You may want to use 'az acr login -n <acr-name> --expose-token' to get an access token, which does not require Docker to be installed.
Решение 1. Выполните команду az acr login -n <acr-name> в другой среде.
Для az acr login -n <acr-name>
выполнения команды требуется клиент Docker и управляющая программа Docker. Azure Cloud Shell предоставляет только клиент Docker. Чтобы устранить эту ошибку, выполните az acr login -n <acr-name>
команду в среде, в которой установлена управляющая программа Docker.
Решение 2. Используйте команду az acr login с параметром "--expose-token"
Для az acr login -n <acr-name>
выполнения команды требуется клиент Docker и управляющая программа Docker. Azure Cloud Shell предоставляет только клиент Docker. az acr login
Однако команда с --expose-token
параметром работает для сред без управляющей программы Docker, например Azure Cloud Shell.
Ошибка 3. "Несанкционированная проверка подлинности требуется"
Ниже приведен пример сведений об ошибке:
Error response from daemon: Get "https://<acr-name>.azurecr.io/v2/": unauthorized: {"errors":[{"code":"UNAUTHORIZED","message":"authentication required, visit https://aka.ms/acr/authorization for more information."}]}
Ошибка указывает на сбой проверки подлинности при доступе к ACR. Эта ошибка может возникать при выполнении az acr login
команды docker login
с неправильным именем пользователя и (или) паролем или истекшим сроком действия учетных данных (при использовании субъекта-службы, маркера с картой области или пользователем администратора).
Решение. Использование правильного и допустимого имени пользователя и пароля
Если вы используете пользователя администратора для проверки подлинности, проверьте учетные данные в колонке ключей доступа и если они используются в команде или
az acr login
командеdocker login
.Примечание.
Пароль, который использовался раньше, возможно, был создан повторно.
Если вы используете маркер, связанный с картой области, проверьте используемые учетные данные. После создания пароля для маркера необходимо извлечь его и безопасно сохранить учетные данные, так как пароль больше не будет отображаться после закрытия экрана. См. сообщение на следующем снимке экрана:
Если вы не уверены в используемом пароле, рассмотрите возможность повторного создания пароля.
Если вы используете маркер, связанный с картой области, срок действия можно задать для пароля. Чтобы просмотреть дату окончания срока действия, можно выполнить команды Azure CLI, описанные в разделе "Показать сведения о маркере", или открыть маркер в портал Azure и проверить дату окончания срока действия на следующем снимке экрана:
Если вы используете субъект-службу, убедитесь, что у него есть определенные разрешения для проверки подлинности с помощью ACR. Сведения о конкретных разрешениях и доступных встроенных ролях см. в разделе Реестр контейнеров Azure ролей и разрешений.
Если вы используете субъект-службу, проверьте используемые учетные данные. После создания секрета необходимо получить его и безопасно сохранить учетные данные, так как пароль больше не будет отображаться после закрытия экрана. См. сообщение на следующем снимке экрана:
Если вы не уверены в используемом значении секрета, рассмотрите возможность создания нового секрета.
Если вы используете субъект-службу, убедитесь, что секрет не истек.
Чтобы проверить допустимость секрета, выполните команду az ad app credential list :
az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv
Кроме того, можно проверить допустимость секрета, убедившись в столбце "Срок действия" в портал Azure:
Если срок действия секрета истек, можно создать новый секрет.
Ошибка 4. "Не удается получить учетные данные администратора"
Ниже приведен пример сведений об ошибке:
Unable to get AAD authorization tokens with message: <date> <time> An error occurred: CONNECTIVITY_REFRESH_TOKEN_ERROR
Access to registry '<acr-name>.azurecr.io' was denied. Response code: 401. Please try running 'az login' again to refresh permissions.
Unable to get admin user credentials with message: The resource with name '<acr-name>' and type 'Microsoft.ContainerRegistry/registries' could not be found in subscription '<subscription-name> (<subscription-id>)'.
Решение. Убедитесь, что используемое удостоверение имеет определенные разрешения
Убедитесь, что удостоверение (например, пользователь или управляемое удостоверение), используемое для проверки подлинности, имеет определенные разрешения. Сведения о конкретных разрешениях и доступных встроенных ролях см. в разделе Реестр контейнеров Azure ролей и разрешений.
Ошибка 5. "Клиент с IP-адресом <> не разрешен доступ"
Ниже приведен пример сведений об ошибке:
Unable to get AAD authorization tokens with message: <date> <time> An error occurred: CONNECTIVITY_REFRESH_TOKEN_ERROR
Access to registry '<acr-name>.azurecr.io' was denied. Response code: 403. Please try running 'az login' again to refresh permissions.
Error response from daemon: Get "https://<acr-name>.azurecr.io/v2/": denied: {"errors":[{"code":"DENIED","message":"client with IP \u0027<ip-address>\u0027 is not allowed access. Refer https://aka.ms/acr/firewall to grant access."}]}
Решение. Убедитесь, что устройство, которое вы пытаетесь проверить подлинность, имеет подключение к ACR
ACR имеет встроенный брандмауэр, который является механизмом ограничения общедоступного доступа. Он может разрешить полный доступ, разрешить доступ только к определенным сетям или полностью отключить общедоступный доступ. Однако для успешной проверки подлинности требуется правильное подключение. Убедитесь, что IP-адрес разрешен для доступа и входа в реестр. Дополнительные сведения о настройке общедоступного доступа см. в разделе "Настройка правил сети общедоступного IP-адреса".
Кроме того, можно использовать Приватный канал Azure для частного подключения к реестру контейнеров Azure.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.