В этой статье рассматриваются часто задаваемые вопросы и известные проблемы Реестра контейнеров Azure.
Рекомендации по устранению неполадок в реестре см. в следующих статьях:
Управление ресурсами
Можно ли создать Реестр контейнеров Azure в Azure Stack Hub с помощью шаблона Resource Manager?
Да. Ниже приведен шаблон , который можно использовать для создания реестра. Этот шаблон предназначен для общедоступного облака Azure. Чтобы использовать этот шаблон для Azure Stack Hub, измените версию API до 2019-05-01, в противном случае не удается развернуть.
Существует ли проверка уязвимостей безопасности для изображений в Реестр контейнеров Azure в Azure Stack Hub?
№ В настоящее время нет интеграции с Центр безопасности Azure для реестров, развернутых в Azure Stack Hub. Существуют 3-й участник и открытый код варианты, которые можно использовать для заполнения этой необходимости для подключенных или отключенных развертываний Azure Stack Hub.
Как настроить Kubernetes с помощью Реестра контейнеров Azure?
См. документацию по Kubernetes и инструкции для Службы Azure Kubernetes.
Как получить учетные данные администратора для реестра контейнеров?
Внимание
Учетная запись администратора предоставляет доступ к реестру одному пользователю. Она предназначена, главным образом, для тестирования. Не рекомендуется совместное использование учетных данных администратора несколькими пользователями. Для пользователей и субъектов-служб в сценариях автоматического входа рекомендуется использовать отдельные удостоверения. См. общие сведения о проверке подлинности.
Перед получением учетных данных администратора убедитесь в том, что администратор реестра включен.
Получение учетных данных с помощью 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'), '2017-10-01').passwords[0].value]"
}
Получение второго пароля:
{
"password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}
Разделы справки отправить образ контейнера в Реестр контейнеров Azure в отключенное развертывание Azure Stack Hub под управлением Kubernetes?
Вы можете выполнить передачу образа компьютера на компьютер через локальную сеть с компьютера, который уже имеет необходимый образ контейнера. Для этого:
Сначала получите необходимые образы контейнеров с помощью компьютера с подключением к Интернету с помощью командной строки Docker и команды извлечения Docker. Дополнительные сведения см. в статье "Импорт образов контейнеров в реестр контейнеров".
После импорта необходимых образов перенаправите компьютер в расположение отключенного экземпляра Azure Hub.
Используйте тег Docker и команды отправки docker для тега и отправки образа в локальный Реестр контейнеров Azure в репозитории Azure Stack Hub.
Операции с реестром
Как получить доступ к API HTTP для реестра Docker версии 2?
Реестр контейнеров Azure поддерживает API HTTP реестра Docker версии 2. Доступ к API можно получить по адресу https://<your registry login server>/v2/
. Пример: https://mycontainerregistry.azsacr.<regionname>.<fqdn>/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 --registry myRegistry --query "[?tags[0]==null].digest" --output tsv | %{ az acr repository delete --name myRegistry --image myRepository@$_ }
Примечание.
Вы можете добавить --yes
в команду удаления, чтобы пропустить подтверждение.
Дополнительные сведения см. в статье Удаление образов контейнеров в службе "Реестр контейнеров Azure".
Почему израсходованная квота реестра не уменьшается после удаления образов?
Такая ситуация может возникнуть, если другие образы контейнеров по-прежнему ссылаются на базовые слои. Если удалить образ без ссылок, данные по использованию реестра будут обновлены через несколько минут.
Как проверить изменения квоты хранилища?
Создайте образ с уровнем 1 ГБ, используя приведенный ниже файл Docker. В результате образ будет иметь уровень, который не используется ни одним другим образом в реестре.
FROM alpine
RUN dd if=/dev/urandom of=1GB.bin bs=32M count=32
RUN ls -lh 1GB.bin
Выполните сборку образа и отправьте его в реестр с помощью CLI Docker.
docker build -t myregistry.azsacr.<regionname>.<fqdn>/1gb:latest .
docker push myregistry.azsacr.<regionname>.<fqdn>/1gb:latest
Вы должны увидеть, что использование хранилища увеличилось на портале Azure Stack Hub или вы можете запросить использование с помощью интерфейса командной строки.
az acr show-usage -n myregistry
Удалите образ с помощью Azure CLI или портала и проверьте обновленные данные по использованию через несколько минут.
az acr repository delete -n myregistry --image 1gb
Как пройти проверку подлинности в реестре при запуске 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
Как включить протокол TLS 1.2?
Включите TLS 1.2 с помощью любого нового клиента Docker (версии не ниже 18.03.0).
Внимание
С 13 января 2020 года Реестр контейнеров Azure будет требовать использовать протокол TLS версии 1.2 для всех безопасных подключений серверов и приложений. Поддержка протоколов TLS версии 1.0 и 1.1 будет прекращена.
Поддерживает ли Реестр контейнеров Azure в Azure Stack Hub доверие содержимого?
Нет, текущий выпуск реестра контейнеров Azure в Azure Stack Hub поддерживает только номер SKU "Стандартный" и не поддерживает доверие содержимого.
Как предоставить доступ к извлекаемым или передаваемым образам без разрешения на управление ресурсом реестра?
Реестр контейнеров Azure поддерживает пользовательские роли, предоставляющие различные уровни разрешений. В частности, роли AcrPull
и AcrPush
позволяют пользователям получать и отправлять образы без разрешения на управление ресурсом реестра в Azure.
Портал Azure Stack Hub. Реестр —> контроль доступа (IAM) —> добавьте (выберите
AcrPull
илиAcrPush
для роли).Azure CLI: найдите идентификатор ресурса реестра, выполнив следующую команду:
az acr show -n myRegistry
Затем можно назначить пользователю роль
AcrPull
илиAcrPush
(в следующем примере используетсяAcrPull
):az role assignment create --scope resource_id --role AcrPull --assignee user@example.com
Можно также назначить роль субъекту-службе, определяемому идентификатором приложения:
az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
После этого пользователь с ролью сможет проходить проверку подлинности и получать доступ к образам в реестре.
Проверка подлинности в реестре:
az acr login -n myRegistry
Вывод списка репозиториев:
az acr repository list -n myRegistry
Получение образа:
docker pull myregistry.azsacr.<regionname>.<fqdn>/hello-world
При использовании только роли AcrPull
или AcrPush
у пользователя нет разрешения на управление ресурсом реестра в Azure. Например, с помощью команды az acr list
или az acr show -n myRegistry
нельзя просмотреть реестр.
Как отправлять нераспространяемые слои в реестр?
Нераспространяемый слой в манифесте содержит параметр 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.azsacr.<regionname>.<fqdn>"] }
Примечание.
Значение представляет собой массив адресов реестра, разделенных запятыми.
Сохраните и закройте файл.
Перезапустите Docker.
При отправке образов в реестры из списка их нераспространяемые слои отправляются в реестр.
Предупреждение
Способы и места распространения и совместного использования нераспространяемых артефактов ограничены. Используйте эту функцию только для отправки артефактов в частные реестры. Убедитесь, что вы выполняете все условия распространения нераспространяемых артефактов.
Диагностика и проверки работоспособности
Проверьте работоспособность с помощью az acr check-health
Сведения об устранении распространенных проблем среды и реестра см. в статье Проверка работоспособности реестра контейнеров Azure.
Сбой при извлечении Docker с ошибкой: net/http: запрос отменен во время ожидания подключения (client.Timeout превышен во время ожидания заголовков)
- Если эта ошибка является временной, повторная попытка завершится успешно.
- Если команда
docker pull
постоянно завершается сбоем, возможно, имеется проблема с управляющей программой Docker. Как правило, такую проблему можно устранить путем перезапуска управляющей программы Docker. - Если эта проблема не пропадает после перезапуска управляющей программы Docker, она может быть связана с неполадками сетевого подключения на компьютере. Чтобы проверить общую работоспособность сети на компьютере, выполните приведенную ниже команду для проверки подключения к конечной точке. Минимальная версия
az acr
, содержащая эту команду проверки подключения, — 2.2.9. Если используется более старая версия, обновите Azure CLI.
az acr check-health -n myRegistry
- Все операции клиента Docker должны предусматривать механизм повторного выполнения.
Docker pull является медленным
Используйте это средство для проверки скорости скачивания по сети на компьютере.
Push-отправка Docker медленна
Используйте это средство для проверки скорости отправки по сети на компьютере.
Отправка Docker завершается успешно, но запрос docker завершается ошибкой: несанкционированная проверка подлинности
Эта ошибка может возникать при использовании версии Red Hat управляющей программы Docker, в которой параметр --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.azsacr.<regionname>.<fqdn>/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
.
az acr login успешно завершается, но docker завершается ошибкой: несанкционированная проверка подлинности
Убедитесь в том, что используется URL-адрес сервера в нижнем регистре, например docker push myregistry.azsacr.<regionname>.<fqdn>/myimage:latest
, даже если имя ресурса реестра содержит символы в верхнем или смешанном регистре, например myRegistry
.
Включение и получение журналов отладки управляющей программы Docker
Запустите dockerd
с параметром debug
. Сначала создайте файл конфигурации управляющей программы Docker (/etc/docker/daemon.json
), если его нет, и добавьте параметр debug
:
{
"debug": true
}
Затем перезапустите управляющую программу. Например, в Ubuntu 14.04:
sudo service docker restart
Подробные сведения можно найти в документации по Docker.
Журналы могут создаваться в разных местах в зависимости от используемой системы. Например, в Ubuntu 14.04 это
/var/log/upstart/docker.log
.
Подробные сведения см. в документации по 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. Обычно оно происходит быстро, но из-за задержки распространения может занимать несколько минут.
Задержка разрешений на сервере токенов Реестр контейнеров Azure. Может составлять до 10 минут. Чтобы устранить эту проблемы, можно выполнить команду
docker logout
, а затем снова пройти проверку подлинности с теми же учетными данными через одну минуту:docker logout myregistry.azsacr.<regionname>.<fqdn> docker login myregistry.azsacr.<regionname>.<fqdn>
Сведения о проверке подлинности не заданы в правильном формате при прямых вызовах 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:2019-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 Stack Hub не перечисляет все репозитории или теги?
В браузере Microsoft Edge или Internet Explorer отображается не более 100 репозиториев или тегов. Если в реестре более 100 репозиториев или тегов, для вывода их списка рекомендуется использовать браузер Firefox или Chrome.
Почему портал Azure Stack Hub не может получить репозитории или теги?
Возможно, браузеру не удается отправить на сервер запрос на получение репозиториев или тегов. Это может происходить по разным причинам:
- отсутствие подключения к сети;
- Брандмауэр
- Использование портала из общедоступной сети для реестра, который разрешает только частный доступ
- блокировщики рекламы;
- ошибки DNS.
Обратитесь к администратору сети или проверьте конфигурацию сети и подключение. Попробуйте выполнить команду az acr check-health -n yourRegistry
в Azure CLI, чтобы проверить, может ли среда подключиться к Реестру контейнеров. Кроме того, в браузере можно попробовать использовать режим инкогнито или частный сеанс, чтобы избежать проблем с устаревшим кэшем или файлами cookie.
Почему не удается выполнить запрос на вытягивание или отправку из-за неразрешенной операции?
Ниже приведены некоторые сценарии, в которых операции могут быть запрещены.
- Образ или репозиторий может быть заблокирован, поэтому его нельзя удалить или обновить. Для просмотра текущих атрибутов можно воспользоваться командой az acr show repository.
- Некоторые операции запрещены, если образ находится на карантине. Дополнительные сведения о карантине.
- Возможно, ваш реестр достиг предельного размера хранилища.
Недопустимый или неподдерживаемый формат репозитория
Если отображается сообщение об ошибке, такое как "неподдерживаемый формат репозитория", "недопустимый формат" или "запрошенные данные не существуют", при указании имени репозитория в операциях репозитория, проверьте правильность и регистр написания имени. Допустимые имена репозитория могут включать только строчные буквы, цифры, точки, дефисы, подчеркивания и символы косой черты.
Как собрать данные трассировки HTTP в Windows?
Необходимые компоненты
- Включите расшифровку HTTPS в fiddler: https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/DecryptHTTPS
- Включите в Docker использование прокси-сервера через пользовательский интерфейс Docker: https://docs.docker.com/docker-for-windows/#proxies
- По завершении отмените эти изменения. 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).
Следующие шаги
- Дополнительные сведения о Реестре контейнеров Azure.