Perguntas frequentes - Azure Container Registry

Este artigo aborda perguntas frequentes e problemas conhecidos sobre o Registro de Contêiner do Azure.

Para obter orientações sobre a solução de problemas do Registro, consulte:

Gestão de recursos

Posso criar um Registro de Contêiner do Azure usando um modelo do Gerenciador de Recursos?

Sim. Aqui está um modelo que você pode usar para criar um registro.

Existe uma verificação de vulnerabilidade de segurança para imagens no ACR?

Sim. Consulte a documentação do Microsoft Defender for Cloud, Twistlock e Aqua.

Como configuro o Kubernetes com o Azure Container Registry?

Consulte a documentação do Kubernetes e as etapas do Serviço Kubernetes do Azure.

Como faço para obter credenciais de administrador para um registro de contêiner?

Importante

A conta de usuário administrador é projetada para um único usuário acessar o registro, principalmente para fins de teste. Não recomendamos compartilhar as credenciais da conta de administrador com vários usuários. A identidade individual é recomendada para usuários e entidades de serviço para cenários sem cabeça. Consulte Visão geral de autenticação.

Antes de obter credenciais de administrador, verifique se o usuário administrador do registro está habilitado.

Para obter credenciais usando a CLI do Azure:

az acr credential show -n myRegistry

Com o Azure PowerShell:

Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry

Como faço para obter credenciais de administrador em um modelo do Gerenciador de Recursos?

Importante

A conta de usuário administrador é projetada para um único usuário acessar o registro, principalmente para fins de teste. Não recomendamos compartilhar as credenciais da conta de administrador com vários usuários. A identidade individual é recomendada para usuários e entidades de serviço para cenários sem cabeça. Consulte Visão geral de autenticação.

Antes de obter credenciais de administrador, verifique se o usuário administrador do registro está habilitado.

Para obter a primeira palavra-passe:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}

Para obter a segunda senha:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}

A exclusão da replicação falha com o status Proibido, embora a replicação seja excluída usando a CLI do Azure ou o Azure PowerShell

O erro é visto quando o usuário tem permissões em um registro, mas não tem permissões de nível de leitor na assinatura. Para resolver esse problema, atribua permissões de leitor na assinatura ao usuário:

az role assignment create --role "Reader" --assignee user@contoso.com --scope /subscriptions/<subscription_id> 

As regras de firewall são atualizadas com êxito, mas não entram em vigor

Leva algum tempo para propagar as alterações nas regras de firewall. Depois de alterar as configurações do firewall, aguarde alguns minutos antes de verificar essa alteração.

Operações de registo

Como faço para acessar a API HTTP V2 do Docker Registry?

O ACR suporta Docker Registry HTTP API V2. As APIs podem ser acessadas em https://<your registry login server>/v2/. Exemplo: https://mycontainerregistry.azurecr.io/v2/

Como faço para excluir todos os manifestos que não são referenciados por nenhuma tag em um repositório?

Se você está em 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@%

Para o 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@$_ }

Nota

Você pode adicionar -y o comando delete para ignorar a confirmação.

Para obter mais informações, consulte Excluir imagens de contêiner no Registro de Contêiner do Azure.

Por que o uso da cota do Registro não diminui após a exclusão de imagens?

Essa situação pode acontecer se as camadas subjacentes ainda estiverem sendo referenciadas por outras imagens de contêiner. Se você excluir uma imagem sem referências, o uso do registro será atualizado em poucos minutos.

Como faço para validar as alterações de cota de armazenamento?

Crie uma imagem com uma camada de 1GB usando o seguinte arquivo docker. Isso garante que a imagem tenha uma camada que não é compartilhada por nenhuma outra imagem no registro.

FROM alpine
RUN dd if=/dev/urandom of=1GB.bin  bs=32M  count=32
RUN ls -lh 1GB.bin

Crie e envie a imagem para o seu registro usando a CLI do docker.

docker build -t myregistry.azurecr.io/1gb:latest .
docker push myregistry.azurecr.io/1gb:latest

Você deve ser capaz de ver que o uso de armazenamento aumentou no portal do Azure ou pode consultar o uso usando a CLI.

az acr show-usage -n myregistry

Exclua a imagem usando a CLI ou o portal do Azure e verifique o uso atualizado em alguns minutos.

az acr repository delete -n myregistry --image 1gb

Como faço para me autenticar com meu registro ao executar a CLI em um contêiner?

Você precisa executar o contêiner da CLI do Azure montando o soquete do Docker:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev

No contentor, instale docker:

apk --update add docker

Em seguida, autentique-se com seu registro:

az acr login -n MyRegistry

Como ativar o TLS 1.2?

Habilite o TLS 1.2 usando qualquer cliente docker recente (versão 18.03.0 e superior).

Importante

A partir de 13 de janeiro de 2020, o Registro de Contêiner do Azure exigirá todas as conexões seguras de servidores e aplicativos para usar o TLS 1.2. O suporte para TLS 1.0 e 1.1 será desativado.

O Azure Container Registry suporta o Content Trust?

Sim, você pode usar imagens confiáveis no Registro de Contêiner do Azure, uma vez que o Docker Notary foi integrado e pode ser habilitado. Para obter detalhes, consulte Confiança de conteúdo no Registro de contêiner do Azure.

Onde está localizado o arquivo para a impressão digital?

Em ~/.docker/trust/tuf/myregistry.azurecr.io/myrepository/metadata:

  • Chaves públicas e certificados de todas as funções (exceto funções de delegação) são armazenados no root.json.
  • As chaves públicas e os certificados da função de delegação são armazenados no arquivo JSON de sua função pai (por exemplo targets.json , para a targets/releases função).

Sugere-se verificar essas chaves públicas e certificados após a verificação geral do TUF feita pelo cliente Docker e Notary.

Como faço para conceder acesso para extrair ou enviar imagens sem permissão para gerenciar o recurso do Registro?

O ACR suporta funções personalizadas que fornecem diferentes níveis de permissões. Especificamente, AcrPull as funções permitem AcrPush que os usuários extraiam e/ou enviem imagens por push sem a permissão para gerenciar o recurso do Registro no Azure.

  • Portal do Azure: Seu registro -> Controle de acesso (IAM) -> Adicionar (Selecionar AcrPull ou AcrPush para a função).

  • CLI do Azure: localize a ID do recurso do Registro executando o seguinte comando:

    az acr show -n myRegistry
    

    Em seguida, você pode atribuir a AcrPull função ou AcrPush a um usuário (o exemplo a seguir usa AcrPull):

    az role assignment create --scope resource_id --role AcrPull --assignee user@example.com
    

    Ou atribua a função a uma entidade de serviço identificada por sua ID de aplicativo:

    az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
    

O cessionário pode então autenticar e aceder às imagens no registo.

  • Para autenticar num registo:

    az acr login -n myRegistry 
    
  • Para listar repositórios:

    az acr repository list -n myRegistry
    
  • Para extrair uma imagem:

    docker pull myregistry.azurecr.io/hello-world
    

Com o uso apenas da AcrPull função ou AcrPush , o cessionário não tem permissão para gerenciar o recurso do Registro no Azure. Por exemplo, az acr list ou az acr show -n myRegistry não mostrará o registro.

Como faço para ativar a quarentena automática de imagens para um registro?

A quarentena de imagens é atualmente um recurso de visualização do ACR. Pode ativar o modo de quarentena de um registo para que apenas as imagens que tenham passado com êxito na verificação de segurança sejam visíveis para utilizadores normais. Para obter detalhes, consulte o repositório ACR GitHub.

Como devo proceder para ativar o acesso por pedido anónimo?

Para obter mais informações, consulte Tornar o conteúdo do Registro disponível publicamente.

Como faço para enviar camadas não distribuíveis para um registro?

Uma camada não distribuível em um manifesto contém um parâmetro de URL do qual o conteúdo pode ser buscado. Alguns casos de uso possíveis para habilitar pushes de camada não distribuíveis são para registros restritos de rede, registros air-gapped com acesso restrito ou para registros sem conectividade com a Internet.

Por exemplo, se você tiver regras NSG configuradas para que uma VM possa extrair imagens somente do seu registro de contêiner do Azure, o Docker extrairá falhas para camadas estrangeiras/não distribuíveis. Por exemplo, uma imagem do Windows Server Core conteria referências de camada estrangeira ao registro de contêiner do Azure em seu manifesto e não conseguiria extrair nesse cenário.

Para habilitar o envio por push de camadas não distribuíveis:

  1. Edite o daemon.json arquivo, que está localizado em /etc/docker/ hosts Linux e no C:\ProgramData\docker\config\daemon.json Windows Server. Supondo que o arquivo estava vazio anteriormente, adicione o seguinte conteúdo:

    {
      "allow-nondistributable-artifacts": ["myregistry.azurecr.io"]
    }
    

    Nota

    O valor é uma matriz de endereços do Registro, separados por vírgulas.

  2. Salve e saia do arquivo.

  3. Reinicie o Docker.

Quando você envia imagens para os registros na lista, suas camadas não distribuíveis são enviadas por push para o registro.

Aviso

Os artefatos não distribuíveis normalmente têm restrições sobre como e onde podem ser distribuídos e compartilhados. Use esse recurso apenas para enviar artefatos para registros privados. Certifique-se de que está em conformidade com quaisquer termos que abranjam a redistribuição de artefactos não distribuíveis.

Diagnósticos e verificações de integridade

Verifique a saúde com 'az acr check-health'

Para solucionar problemas comuns de ambiente e registro, consulte Verificar a integridade de um registro de contêiner do Azure.

O pull do Docker falha com erro: net/http: solicitação cancelada enquanto aguarda conexão (Client.Timeout excedido enquanto aguarda cabeçalhos)

  • Se esse erro for um problema transitório, a nova tentativa será bem-sucedida.
  • Se docker pull falhar continuamente, então pode haver um problema com o daemon do Docker. O problema geralmente pode ser atenuado reiniciando o daemon do Docker.
  • Se você continuar a ver esse problema depois de reiniciar o daemon do Docker, o problema pode ser alguns problemas de conectividade de rede com a máquina. Para verificar se a rede geral na máquina está íntegra, execute o seguinte comando para testar a conectividade do ponto de extremidade. A versão mínima az acr que contém esse comando de verificação de conectividade é 2.2.9. Atualize sua CLI do Azure se estiver usando uma versão mais antiga.
az acr check-health -n myRegistry
  • Você sempre deve ter um mecanismo de repetição em todas as operações do cliente Docker.

A tração do Docker é lenta

Use a ferramenta de velocidade para testar a velocidade de download da rede da sua máquina. Se a rede da máquina estiver lenta, considere usar a VM do Azure na mesma região do seu registro para melhorar a velocidade da rede.

O push do Docker é lento

Use a ferramenta de velocidade para testar a velocidade de upload da rede da sua máquina. Se a rede da máquina estiver lenta, considere usar a VM do Azure na mesma região do seu registro para melhorar a velocidade da rede.

O envio por push do Docker é bem-sucedido, mas o pull do Docker falha com erro: não autorizado: autenticação necessária

Esse erro pode acontecer com a versão Red Hat do daemon do Docker, onde --signature-verification é ativado por padrão. Você pode verificar as opções do daemon do Docker para Red Hat Enterprise Linux (RHEL) ou Fedora executando o seguinte comando:

grep OPTIONS /etc/sysconfig/docker

Por exemplo, o Fedora 28 Server tem as seguintes opções de daemon docker:

OPTIONS='--selinux-enabled --log-driver=journald --live-restore'

Com --signature-verification=false falta, docker pull falha com um erro semelhante a:

Trying to pull repository myregistry.azurecr.io/myimage ...
unauthorized: authentication required

Para resolver o erro:

  1. Adicione a opção --signature-verification=false ao arquivo /etc/sysconfig/dockerde configuração do daemon do Docker. Por exemplo:

    OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'

  2. Reinicie o serviço daemon do Docker executando o seguinte comando:

    sudo systemctl restart docker.service
    

Detalhes de --signature-verification pode ser encontrado executando man dockerd.

O login AZ ACR é bem-sucedido, mas o Docker falha com erro: Não autorizado: autenticação necessária

Certifique-se de usar uma URL de servidor com todas as letras minúsculas, por exemplo, docker push myregistry.azurecr.io/myimage:latestmesmo que o nome do recurso do Registro seja maiúsculo ou misto, como myRegistry.

Habilitar e obter os logs de depuração do daemon do Docker

Comece dockerd com a debug opção. Primeiro, crie o arquivo de configuração do daemon do Docker (/etc/docker/daemon.json) se ele não existir e adicione a debug opção:

{    
    "debug": true    
}

Em seguida, reinicie o daemon. Por exemplo, com o Ubuntu 14.04:

sudo service docker restart

Os detalhes podem ser encontrados na documentação do Docker.

  • Os logs podem ser gerados em locais diferentes, dependendo do seu sistema. Por exemplo, para o Ubuntu 14.04, é /var/log/upstart/docker.log.
    Consulte a documentação do Docker para obter detalhes.

  • Para o Docker para Windows, os logs são gerados em %LOCALAPPDATA%/docker/. No entanto, ele pode não conter todas as informações de depuração ainda.

    Para acessar o log completo do daemon, você pode precisar de algumas etapas extras:

    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
    

    Agora você tem acesso a todos os arquivos da VM em execução dockerd. O log está em /var/log/docker.log.

Novas permissões de usuário podem não entrar em vigor imediatamente após a atualização

Quando você concede novas permissões (novas funções) a uma entidade de serviço, a alteração pode não entrar em vigor imediatamente. Existem duas razões possíveis:

  • Atraso na atribuição de funções do Microsoft Entra. Normalmente é rápido, mas pode levar minutos devido ao atraso na propagação.

  • O atraso de permissão no servidor de token ACR pode levar até 10 minutos. Para atenuar, você pode docker logout e autenticar novamente com o mesmo usuário após 1 minuto:

    docker logout myregistry.azurecr.io
    docker login myregistry.azurecr.io
    

Atualmente, o ACR não oferece suporte à exclusão de replicação doméstica pelos usuários. A solução alternativa é incluir a criação de replicação doméstica no modelo, mas ignorar sua criação adicionando "condition": false como mostrado abaixo:

{
    "name": "[concat(parameters('acrName'), '/', parameters('location'))]",
    "condition": false,
    "type": "Microsoft.ContainerRegistry/registries/replications",
    "apiVersion": "2017-10-01",
    "location": "[parameters('location')]",
    "properties": {},
    "dependsOn": [
        "[concat('Microsoft.ContainerRegistry/registries/', parameters('acrName'))]"
     ]
},

As informações de autenticação não são fornecidas no formato correto em chamadas diretas à API REST

Você pode encontrar um InvalidAuthenticationInfo erro, especialmente usando a curl ferramenta com a opção -L, --location (para seguir redirecionamentos). Por exemplo, buscando o blob usando curl com -L opção e autenticação básica:

curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest

pode resultar na seguinte resposta:

<?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>

A causa raiz é que algumas curl implementações seguem redirecionamentos com cabeçalhos da solicitação original.

Para resolver o problema, você precisa seguir os redirecionamentos manualmente sem os cabeçalhos. Imprima os cabeçalhos de resposta com a -D - opção de curl e, em seguida, extraia: o Location cabeçalho:

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

Por que o portal do Azure não lista todos os meus repositórios ou tags?

Se você estiver usando o navegador Microsoft Edge/IE, poderá ver no máximo 100 repositórios ou tags. Se o seu registro tiver mais de 100 repositórios ou tags, recomendamos que você use o navegador Firefox ou Chrome para listá-los todos.

Por que o portal do Azure não consegue buscar repositórios ou tags?

O navegador pode não ser capaz de enviar a solicitação para buscar repositórios ou tags para o servidor. Podem existir várias razões, tais como:

  • Falta de conectividade de rede
  • Firewall
  • Usando o portal de uma rede pública para um registro que permite apenas acesso privado
  • Bloqueadores de anúncios
  • Erros de DNS

Entre em contato com o administrador da rede ou verifique a configuração e a conectividade da rede. Tente executar az acr check-health -n yourRegistry usando sua CLI do Azure para verificar se seu ambiente é capaz de se conectar ao Registro de Contêiner. Além disso, você também pode tentar uma sessão anônima ou privada em seu navegador para evitar qualquer cache ou cookies obsoletos do navegador.

Por que minha solicitação pull ou push falha com a operação não permitida?

Aqui estão alguns cenários em que as operações podem não ser permitidas:

  • Os registos clássicos já não são suportados. Atualize para uma camada de serviço suportada usando az acr update ou o portal do Azure.
  • A imagem ou repositório pode estar bloqueado para que não possa ser excluído ou atualizado. Você pode usar o comando az acr repository show para visualizar os atributos atuais.
  • Algumas operações não são permitidas se a imagem estiver em quarentena. Saiba mais sobre a quarentena.
  • O seu registo pode ter atingido o seu limite de armazenamento.

O formato do repositório é inválido ou não é suportado

Se você vir um erro como "formato de repositório não suportado", "formato inválido" ou "os dados solicitados não existem" ao especificar um nome de repositório em operações de repositório, verifique a ortografia e maiúsculas e minúsculas do nome. Os nomes de repositório válidos só podem incluir caracteres alfanuméricos minúsculos, pontos, traços, sublinhados e barras para frente.

Como faço para coletar rastreamentos http no Windows?

Pré-requisitos

  • Ativar a desencriptação HTTPS no Fiddler
  • Habilite o Docker para usar um proxy por meio da interface do usuário do Docker.
  • Certifique-se de reverter quando terminar. O Docker não funcionará com isso ativado e o Fiddler não estará em execução.

Contentores do Windows

Configurar o proxy do Docker para 127.0.0.1:8888

Contentores do Linux

Encontre o ip do comutador virtual VM do Docker:

(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress

Configure o proxy do Docker para a saída do comando anterior e a porta 8888 (por exemplo, 10.0.75.1:8888)

Tarefas

Como faço para cancelar execuções em lote?

Os comandos a seguir cancelam todas as tarefas em execução no registro especificado.

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 %

Como faço para incluir a pasta .git no comando az acr build?

Se você passar uma pasta de origem local para o az acr build comando, a .git pasta será excluída do pacote carregado por padrão. Você pode criar um .dockerignore arquivo com a seguinte configuração. Ele diz ao comando para restaurar todos os arquivos no .git pacote carregado.

!.git/**

Essa configuração também se aplica ao az acr run comando.

O Tasks suporta gatilhos do GitLab for Source?

Atualmente, não suportamos o GitLab para gatilhos de origem.

Qual serviço de gerenciamento de repositório git é compatível com o Tasks?

Serviço Git Contexto de origem Compilação manual Compilação automática através do gatilho de confirmação
GitHub https://github.com/user/myapp-repo.git#mybranch:myfolder Sim Sim
Repositórios do Azure https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder Sim Sim
GitLab https://gitlab.com/user/myapp-repo.git#mybranch:myfolder Sim No
BitBucket https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder Sim No

Executar solução de problemas de mensagem de erro

Mensagem de Erro Guia de resolução de problemas
Nenhum acesso foi configurado para a VM, portanto, nenhuma assinatura foi encontrada Isso pode acontecer se você estiver usando az login --identity em sua tarefa ACR. Este é um erro transitório e ocorre quando a atribuição de função da sua Identidade Gerenciada não se propagou. Esperar alguns segundos antes de tentar novamente funciona.

Integração de CI/CD

Como resolver se a criação do pool de agentes falhar devido a problemas de tempo limite?

Configure as regras de firewalls corretas para os grupos de segurança de rede existentes ou rotas definidas pelo usuário. Após a configuração, aguarde alguns minutos até que as regras de firewall sejam aplicadas.

Como habilitar a política interna do Azure para blocos ACR habilitando credenciais de administrador?

A seguinte política interna do Azure, quando definida como o respetivo status de política, impedirá que o usuário habilite o usuário administrador em seu registro.

Política interna do Azure Estado da política Estado de administrador
Configure registros de contêiner para desabilitar a conta de administrador local. Modificar Desativar
Os registros de contêiner devem ter a conta de administrador local desabilitada. Negar Desativar
Os registros de contêiner devem ter a conta de administrador local desabilitada. Audit não conformes

Próximos passos