В этой статье рассматриваются часто задаваемые вопросы и известные проблемы Реестра контейнеров Azure.
Рекомендации по устранению неполадок в реестре см. в следующих статьях:
Вопросы по управлению ресурсами и общими вопросами
Можно ли создать реестр контейнеров Azure (ACR) с помощью шаблона Azure Resource Manager (ARM)?
Да. Ниже приведен шаблон , который можно использовать для создания реестра.
Есть ли возможность проверки образов в ACR на уязвимости системы безопасности?
Да. Вы можете использовать Microsoft Defender для контейнеров или другие решения, такие как Aqua.
Как настроить Kubernetes с помощью Реестра контейнеров Azure?
См. документацию по Kubernetes и действия для службы Azure Kubernetes.
Как получить учетные данные администратора для реестра контейнеров?
Внимание
Учетная запись администратора предназначена для одного пользователя для доступа к реестру, главным образом для тестирования. Не делитесь учетными данными учетной записи администратора среди нескольких пользователей. Все пользователи, аутентифицирующиеся через учетную запись администратора, отображаются как один пользователь с доступом на отправку и получение к реестру. Изменение или отключение этой учетной записи отключает доступ к реестру для всех пользователей, использующих свои учетные данные. Обычно рекомендуется использовать индивидуальное удостоверение для пользователей и субъектов-служб для сценариев без головы. Дополнительные сведения см. в обзоре проверки подлинности ACR.
Чтобы получить учетные данные администратора, необходимо включить пользователя администратора реестра.
Чтобы получить учетные данные администратора с помощью Azure CLI, выполните следующую команду:
az acr credential show -n myRegistry
Чтобы получить учетные данные администратора с помощью Azure PowerShell, выполните следующую команду:
Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry
Чтобы получить учетные данные администратора в шаблоне Resource Manager, выполните следующую команду, чтобы получить первый пароль:
{
"password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2025-04-01').passwords[0].value]"
}
Затем, чтобы получить второй пароль, выполните следующую команду:
{
"password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2025-04-01').passwords[1].value]"
}
Чтобы получить учетные данные администратора с помощью портала Azure, перейдите в реестр и в меню службы в разделе "Параметры" выберите "Ключи доступа".
Как запретить пользователям включать учетные данные администратора для ACR?
Следующие встроенные политики Azure можно использовать для предотвращения включения администраторского пользователя в реестрах:
| Встроенная политика Azure | Состояние политики | Состояние администратора |
|---|---|---|
| Настройте реестры контейнеров, чтобы отключить локальную учетную запись администратора. | Изменить | Отключить |
| В реестрах контейнеров должна быть отключена локальная учетная запись администратора. | Запрет | Отключить |
| В реестрах контейнеров должна быть отключена локальная учетная запись администратора. | Аудит | несоответствующие |
Почему при удалении репликации отображается состояние "Запрещено"?
Эта ошибка возникает, если у вас есть роль участника реестра контейнеров и администратора конфигурации доступа к данным в реестре, что позволяет удалять реплики с помощью Azure CLI, но у вас нет роли читателя в подписке. Чтобы устранить эту проблему, назначьте пользователю роль читателя в области подписки.
Почему правила брандмауэра не действуют после обновления?
Для распространения изменений правил брандмауэра может потребоваться некоторое время. После изменения параметров брандмауэра подождите несколько минут, прежде чем проверить изменение.
Как избежать ошибок из-за использования устаревшего API?
Перейдите к более новой версии API ACR. Здесь можно найти список поддерживаемых версий.
Если вы используете API через пакеты SDK, перейдите к новой версии API, обновив до более новой версии пакета SDK. Список пакетов SDK и их последних версий можно найти здесь.
Следующие версии API устарели и поддерживаются по состоянию на дату окончания поддержки, указанную ниже:
| Версия API | Первое объявление об отмене | Дата окончания поддержки |
|---|---|---|
| 2016-06-27-превью | Июль 2023 г. | Октябрь 2023 |
| 2017-06-01-preview | Июль 2023 г. | Октябрь 2023 |
| 2018-02-01-preview | Июль 2023 г. | Октябрь 2023 |
| 2017-03-01-GA | Сентябрь 2023 г. | Сентябрь 2026 г. |
Операции с реестром
Как получить доступ к API HTTP для реестра Docker версии 2?
ACR поддерживает API HTTP для реестра Docker версии 2. Доступ к API можно получить по адресу https://<your registry login server>/v2/. Пример: https://mycontainerregistry.azurecr.io/v2/
Как удалить все манифесты, на которые не ссылается какой-либо тег в репозитории?
Для Bash выполните следующую команду:
az acr manifest list-metadata --name myRepository --registry myRegistry --query "[?tags[0]==null].digest" --output tsv | xargs -I% az acr repository delete --name myRegistry --image myRepository@%
Для PowerShell выполните следующую команду:
az acr manifest list-metadata --name myRepository --repository myRegistry --query "[?tags[0]==null].digest" --output tsv | %{ az acr repository delete --name myRegistry --image myRepository@$_ }
Примечание.
Вы можете добавить -y в команду удаления, чтобы пропустить подтверждение.
Дополнительные сведения см. в статье "Удаление образов контейнеров в реестре контейнеров Azure".
Почему после удаления образов не удается уменьшить использование квоты реестра?
Эта ситуация возникает, когда на базовые слои по-прежнему ссылаются другие образы контейнеров. При удалении образа без ссылок использование реестра должно обновляться в течение нескольких минут.
Как проверить изменения квоты хранилища?
Создайте образ с 1 ГБ слоем с помощью следующего Dockerfile. Этот шаг гарантирует, что образ будет иметь слой, который не является общим с другим изображением в реестре.
FROM alpine
RUN dd if=/dev/urandom of=1GB.bin bs=32M count=32
RUN ls -lh 1GB.bin
Создайте и отправьте образ в реестр с помощью интерфейса командной строки Docker:
docker build -t myregistry.azurecr.io/1gb:latest .
docker push myregistry.azurecr.io/1gb:latest
Вы должны увидеть, что использование хранилища увеличилось на портале Azure или вы можете запросить использование с помощью Azure CLI:
az acr show-usage -n myregistry
Затем удалите изображение с помощью Azure CLI или на портале Azure, подождите несколько минут, а затем проверьте обновленное использование.
az acr repository delete -n myregistry --image 1gb
Как выполнить проверку подлинности с помощью реестра при запуске Azure CLI в контейнере?
Необходимо запустить контейнер Azure CLI, подключив сокет Docker:
docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev
В контейнере установите docker:
apk --update add docker
Затем пройдите проверку подлинности в реестре:
az acr login -n MyRegistry
Поддерживает ли Реестр контейнеров Azure доверие содержимому?
В настоящее время можно использовать доверенные образы в реестре контейнеров Azure с помощью Docker Content Trust (DCT). Однако реестр контейнеров Azure выведет DCT из эксплуатации 31 марта 2028 года.
В качестве альтернативы DCT корпорация Майкрософт предлагает решения для подписывания и проверки на основе нотаричного проекта. Мы рекомендуем вам как можно скорее перейти с DCT на нотарийный проект .
До 31 мая 2026 г. Docker Content Trust можно включить в новых реестрах контейнеров или реестрах, которые ранее не включили его. Дополнительные сведения см. в статье "Управление подписанными изображениями с помощью Docker Content Trust в Реестре контейнеров Azure".
Файл отпечатка расположен в разделе ~/.docker/trust/private/tuf/myregistry.azurecr.io/myrepository/metadata:
- Открытые ключи и сертификаты всех ролей (за исключением ролей делегирования) хранятся в
root.json. - Открытые ключи и сертификаты роли делегирования хранятся в JSON-файле родительской роли (например,
targets.jsonдля ролиtargets/releases).
Проверьте открытые ключи и сертификаты после общей проверки TUF, выполненной клиентом Docker и Нотари.
Как предоставить доступ к изображениям для извлечения или отправки без предоставления разрешений на управление ресурсом реестра?
ACR поддерживает управление доступом на основе ролей Microsoft Entra (RBAC) и встроенные роли , предоставляющие различные уровни разрешений на основе Microsoft Entra, например предоставление разрешений на отправку или извлечение изображений без предоставления разрешений всему реестру.
При необходимости можно использовать управление доступом на основе атрибутов Microsoft Entra (ABAC) для управления разрешениями репозитория на основе Microsoft Entra и назначениями ролей области для определенных репозиториев.
Как включить автоматическое помещение образов в карантин для реестра?
В настоящее время помещение образов в карантин — это предварительная версия функции в ACR. Режим карантина реестра может быть включен таким образом, чтобы обычные пользователи видели только изображения, прошедшие проверку безопасности. Дополнительные сведения см. в репозитории ACR GitHub.
Как включить анонимный доступ для извлечения?
Анонимный доступ к запросу можно настроить с помощью Azure CLI. Дополнительные сведения см. в неавторизованном анонимном доступе по запросу.
Как отправить нераспространяемые слои в реестр?
Нераспространяемый слой в манифесте содержит параметр URL, из которого можно получить содержимое. Некоторые возможные варианты использования нераспространяемых отправок уровня относятся к реестрам с ограниченным доступом к сети, реестрам с ограниченным доступом или к реестрам без подключения к Интернету.
Например, если у вас имеются правила группы безопасности сети (NSG), чтобы виртуальная машина могла загружать образы только из реестра контейнеров Azure, Docker может столкнуться с ошибками при загрузке внешних или нераспространяемых слоев. Например, образ Windows Server Core будет содержать ссылки на внешние слои в реестр контейнеров Azure в своем манифесте и не будет доступен для извлечения в этом сценарии.
Чтобы включить выталкивание нераспределяемых слоев:
Измените файл
daemon.json, который находится в/etc/docker/на узлах Linux и вC:\ProgramData\docker\config\daemon.jsonна Windows Server. Если до этого файл был пустым, добавьте следующее содержимое:{ "allow-nondistributable-artifacts": ["myregistry.azurecr.io"] }Примечание.
Значение представляет собой массив адресов реестра, разделенных запятыми.
Сохраните и закройте файл.
Перезапустите Docker.
Когда вы отправляете изображения в реестры в списке, их нераспространяемые слои отправляются в реестр.
Предупреждение
Нераспространяемые артефакты обычно имеют ограничения на то, как и где они могут распространяться и совместно использоваться. Используйте эту функцию только для отправки артефактов в частные реестры. Убедитесь, что вы соблюдаете все условия, регулирующие распространение нераспространяемых артефактов.
Диагностика и проверки работоспособности
Как проверить работоспособность реестра?
az acr check-health Вы можете использовать, чтобы устранить распространенные проблемы со средой и реестром. Проверьте состояние реестра контейнеров Azure.
Как решить проблемы с временем ожидания Docker?
Может появить сообщение об ошибке net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). Для разрешения этой проблемы:
- Сначала подождите несколько минут и повторите попытку. Эта проблема может быть временной.
- При непрерывных сбоях
docker pullперезапустите демон Docker. - Если вы продолжаете видеть эту проблему после перезапуска управляющей программы Docker, это может произойти из-за проблемы с сетевым подключением. Выполните следующую команду, чтобы проверить подключение к конечной точке:
az acr check-health -n myRegistry
- Все операции клиента Docker должны предусматривать механизм повторного выполнения.
Почему операции Docker push или pull медленные?
Это обычно связано с тем, что компьютер находится в медленной сети. Проверьте скорость загрузки сети. Чтобы повысить скорость, попробуйте использовать виртуальную машину Azure в том же регионе, что и реестр, чтобы повысить скорость сети.
Почему команда `docker pull` заканчивается ошибкой: «неавторизовано: требуется проверка подлинности»
Во-первых, убедитесь, что вы используете весь URL-адрес сервера нижнего регистра, например docker push myregistry.azurecr.io/myimage:latest, даже если имя ресурса реестра является верхним регистром или смешанным регистром, например myRegistry.
Эта ошибка также может произойти с версией управляющей программы Docker Red Hat, где --signature-verification включена по умолчанию. Проверить параметры управляющей программы Docker для Red Hat Enterprise Linux (RHEL) или Fedora можно с помощью следующей команды:
grep OPTIONS /etc/sysconfig/docker
Например, Fedora 28 Server имеет следующие параметры управляющей программы Docker:
OPTIONS='--selinux-enabled --log-driver=journald --live-restore'
При отсутствии --signature-verification=false команда docker pull завершается ошибкой наподобие следующей:
Trying to pull repository myregistry.azurecr.io/myimage ...
unauthorized: authentication required
Чтобы устранить эту ошибку, сделайте следующее:
Добавьте параметр
--signature-verification=falseв файл конфигурации управляющей программы Docker/etc/sysconfig/docker. Например:OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'Перезапустите службу управляющей программы Docker, выполнив следующую команду:
sudo systemctl restart docker.service
Чтобы получить подробные сведения о --signature-verification, выполните команду man dockerd.
Как включить и получить журналы отладки управляющей программы Docker?
Запустите dockerd с параметром debug. Сначала создайте файл конфигурации управляющей программы Docker (/etc/docker/daemon.json), если его нет, и добавьте параметр debug:
{
"debug": true
}
Затем перезапустите управляющую программу.
sudo service docker restart
Подробные сведения см. в документации по Docker.
Журналы могут создаваться в разных местах в зависимости от используемой системы. Подробнее см. в документации Docker.
Для Docker для Windows журналы создаются в папке %LOCALAPPDATA%/docker/. Однако для доступа к полному журналу управляющей программы может потребоваться выполнить следующие дополнительные команды:
docker run --privileged -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker:/usr/local/bin/docker alpine sh docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh chroot /hostТеперь у вас есть доступ ко всем файлам виртуальной машины, в которой выполняется
dockerd. Журнал находится в файле/var/log/docker.log.
Почему новые разрешения пользователей не являются эффективными сразу после предоставления?
Назначения ролей Microsoft Entra обычно выполняются быстро, но иногда могут возникать задержки. Кроме того, на сервере маркеров ACR может возникнуть задержка в выдаче разрешений до 10 минут. Чтобы устранить проблему, запустите docker logout, подождите одну минуту и повторите проверку подлинности с теми же учетными данными пользователя:
docker logout myregistry.azurecr.io
docker login myregistry.azurecr.io
Может ли пользователь удалить домашнюю репликацию реестра контейнеров Azure?
В настоящее время ACR не поддерживает удаление домашней репликации пользователями. Вместо этого можно включить создание домашней репликации в шаблон, но пропустить её выполнение, добавив "condition": false:
{
"name": "[concat(parameters('acrName'), '/', parameters('location'))]",
"condition": false,
"type": "Microsoft.ContainerRegistry/registries/replications",
"apiVersion": "2025-04-01",
"location": "[parameters('location')]",
"properties": {},
"dependsOn": [
"[concat('Microsoft.ContainerRegistry/registries/', parameters('acrName'))]"
]
},
Почему данные проверки подлинности не заданы в правильном формате при прямых вызовах REST API?
Может возникнуть ошибка InvalidAuthenticationInfo, особенно при использовании средства curl с параметром -L, --location (для поддержки перенаправлений).
Например, вы можете получить блоб, используя параметр curl и базовую проверку подлинности: -L.
curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest
Это может привести к следующему ответу:
<?xml version="1.0" encoding="utf-8"?>
<Error><Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.
RequestId:00000000-0000-0000-0000-000000000000
Time:2023-01-01T00:00:00.0000000Z</Message></Error>
Основная причина заключается в том, что некоторые реализации curl поддерживают перенаправления с заголовками из исходного запроса.
Чтобы решить проблему, следуйте перенаправлениям вручную, не используя заголовки. Выведите заголовки ответа с параметром -D -curl, а затем извлеките заголовок Location:
REDIRECT_URL=$(curl -s -D - -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest | grep "^Location: " | cut -d " " -f2 | tr -d '\r')
curl $REDIRECT_URL
Почему порталу Azure не удается получить репозитории или теги?
Сбои отправки запросов на получение могут быть вызваны различными причинами, например:
- отсутствие подключения к сети;
- Брандмауэр
- Использование портала из общедоступной сети для реестра, который разрешает только частный доступ
- блокировщики рекламы;
- Ошибки сервера доменных имен (DNS)
Обратитесь к сетевому администратору или проверьте конфигурацию сети и подключение.
az acr check-health -n yourRegistry Попробуйте проверить, может ли ваша среда подключиться к реестру. Вы также можете попробовать использовать инкогнито или частный сеанс в браузере, чтобы избежать любого устаревшего кэша браузера или файлов cookie.
Почему не удается выполнить запрос на вытягивание или отправку из-за неразрешенной операции?
Ниже приведены некоторые сценарии, в которых операции могут быть запрещены.
- Классические реестры больше не поддерживаются. Перейдите на поддерживаемый уровень служб с помощью az acr update или портала Azure.
- Образ или репозиторий может быть заблокирован, поэтому его нельзя удалить или обновить. Для просмотра текущих атрибутов можно использовать команду az acr repository show .
- Некоторые операции запрещены, если изображение находится в карантине.
- Возможно, ваш реестр достиг предела хранилища.
Почему отображается сообщение об ошибке, в которой формат репозитория недопустим или не поддерживается?
Если при указании имени репозитория в операциях репозитория вы видите ошибку типа «неподдерживаемый формат репозитория», «недопустимый формат» или «запрошенные данные не существуют», проверьте правильность написания и регистр имени. Допустимые имена репозитория могут включать только строчные буквы, цифры, точки, дефисы, подчеркивания и символы косой черты.
Как собрать данные трассировки HTTP в Windows?
Сначала включите расшифровку HTTPS в Fiddler и включите Docker для использования прокси-сервера через пользовательский интерфейс Docker. Не забудьте вернуться после завершения, так как Docker не работает с включенным прокси-сервером и Fiddler не запущен.
Для контейнеров Windows настройте прокси-сервер Docker на 127.0.0.1:8888.
Для контейнеров Linux найдите IP-адрес виртуального коммутатора виртуальной машины Docker:
(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress
Затем настройте прокси-сервер Docker для вывода предыдущей команды и порта 8888 (например, 10.0.75.1:8888).
Задачи
Как массово отменить выполнения?
Приведенные ниже команды отменяют все выполняемые задачи в указанном реестре.
az acr task list-runs -r $myregistry --run-status Running --query '[].runId' -o tsv \
| xargs -I% az acr task cancel-run -r $myregistry --run-id %
Как включить папку .git в команду az acr build?
Если передать локальную папку с исходным кодом в команду az acr build, папка .git по умолчанию исключается из отправляемого пакета. Файл можно создать .dockerignore с помощью следующей настройки:
!.git/**
Этот параметр указывает команде восстановить все файлы в пределах .git в загруженном пакете. Она также применяется к команде az acr run .
Поддерживают ли задачи GitLab для исходных триггеров?
В настоящее время GitLab для исходных триггеров не поддерживается.
Какая служба управления репозиторием GIT поддерживает задачи?
| Служба GIT | Исходный контекст | Ручная сборка | Автоматическая сборка с помощью триггера фиксации |
|---|---|---|---|
| GitHub | https://github.com/user/myapp-repo.git#mybranch:myfolder |
Да | Да |
| Azure Repos | https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder |
Да | Да |
| GitLab | https://gitlab.com/user/myapp-repo.git#mybranch:myfolder |
Да | Нет |
| Bitbucket; | https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder |
Да | Нет |
Почему я вижу сообщение об ошибке, в котором говорится, что подписки не найдены?
Может появиться сообщение об ошибке, говорящее, что доступ не настроен, поэтому при использовании az login --identity в задаче ACR подписки не были найдены. Эта ошибка обычно является временной и возникает, когда назначение роли управляемого удостоверения еще не было распространено. Подождите несколько секунд, прежде чем повторить попытку.
Где можно найти пример интеграции CI/CD с задачами ACR?
Пример интеграции CI/CD с задачами ACR можно найти по следующим ссылкам:
Как устранить сбой создания пула агентов из-за таймаута?
Настройте правильные правила брандмауэра для существующих групп безопасности сети или определяемых пользователем маршрутов. Для применения правил брандмауэра может потребоваться несколько минут.
Следующие шаги
- Дополнительные сведения о реестре контейнеров Azure.