Perguntas frequentes – Registro de Contêiner do Azure

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

Para obter diretrizes de solução de problemas do registro, consulte:

Gerenciamento de recursos

Posso criar um Registro de Contêiner do Azure usando um modelo do Resource Manager?

Sim. Este é um de modelo que você pode usar para criar um registro.

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

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

Como posso configurar o Kubernetes com o Registro de Contêiner do Azure?

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

Como posso obter credenciais de administrador para um registro de contêiner?

Importante

A conta de usuário administrador destina-se para um único usuário acessar o registro, principalmente para fins de teste. Não é recomendável compartilhar as credenciais da conta do administrador com vários usuários. Para cenários remotos, recomenda-se identidade individual para usuários e entidades de serviço. Confira Visão geral da autenticação.

Antes de obter as 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

Usar o Microsoft Azure PowerShell:

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

Como posso obter credenciais de administrador em um modelo do Resource Manager?

Importante

A conta de usuário administrador destina-se para um único usuário acessar o registro, principalmente para fins de teste. Não é recomendável compartilhar as credenciais da conta do administrador com vários usuários. Para cenários remotos, recomenda-se identidade individual para usuários e entidades de serviço. Confira Visão geral da autenticação.

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

Para obter a primeira senha:

{
    "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 é observado 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 sucesso, mas não entram em vigor

Demora um pouco para propagar as alterações das regras de firewall. Depois de alterar as configurações de firewall, aguarde alguns minutos antes de verificar essa alteração.

Operações de registro

Como posso acessar o Docker Registry HTTP API V2?

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

Como posso excluir todos os manifestos que não são referenciados por marcas em um repositório?

Se você estiver no 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 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@$_ }

Observação

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

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

Por que o uso de cota de registro não é reduzido após a exclusão de imagens?

Essa situação pode ocorrer 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 alguns minutos.

Como posso validar as alterações de cota de armazenamento?

Crie uma imagem com uma camada de 1 GB, usando o seguinte arquivo do 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 registro usando a CLI do Docker.

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

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

az acr show-usage -n myregistry

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

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

Como posso autenticar com o meu registro ao executar a CLI em um contêiner?

É necessário 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 contêiner, instale o docker:

apk --update add docker

Em seguida, autentique com seu registro:

az acr login -n MyRegistry

Como habilitar o TLS 1.2W?

Habilite o TLS 1.2 usando qualquer cliente recente do Docker (versão 18.03.0 e posterior).

Importante

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

O Registro de Contêiner do Azure é compatível com a Confiança em Conteúdo?

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

Onde está localizado o arquivo da impressão digital?

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

  • As chaves públicas e os certificados de todas as funções (exceto as 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 da função pai (por exemplo targets.json para a função targets/releases).

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

Como posso conceder acesso para receber ou enviar imagens sem permissão para gerenciar o recurso de registro?

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

  • Portal do Azure: Seu Registro –> Controle de Acesso (IAM) –> Adicionar (selecione AcrPull ou AcrPush para a Função).

  • CLI do Azure: Encontre a ID do recurso do registro executando o comando a seguir:

    az acr show -n myRegistry
    

    Em seguida, você pode atribuir a função AcrPull 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, atribuir 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 destinatário pode autenticar e acessar as imagens no registro.

  • Para autenticar para um registro:

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

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

    docker pull myregistry.azurecr.io/hello-world
    

Usando somente a função AcrPull ou AcrPush, o destinatário não tem permissão para gerenciar o recurso de registro no Azure. Por exemplo, az acr list ou az acr show -n myRegistry não mostra o registro.

Como posso habilitar a quarentena automática de imagens de um registro?

Atualmente, a quarentena da imagem é uma versão prévia do recurso do ACR. Você pode habilitar o modo de quarentena de um registro para que apenas as imagens que foram aprovadas com sucesso na verificação de segurança fiquem visíveis para os usuários normais. Para obter detalhes, confira o repositório GitHub do ACR.

Como posso habilitar o acesso de pull anônimo?

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

Como fazer para enviar camadas não distribuíveis por push 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 obtido. Alguns casos de uso possíveis para habilitar pushes de camadas não distribuíveis são para registros restritos de rede, registros de ar-gapped com acesso restrito ou para registros sem conectividade com a Internet.

Por exemplo, se você tiver regras de NSG configuradas para que uma VM possa extrair imagens somente do seu registro de contêiner do Azure, o Docker efetuará pull de falhas para camadas externas/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 efetuar pull 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"]
    }
    

    Observação

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

  2. Salve e feche o arquivo.

  3. Reinicie o Docker.

Quando você envia imagens por push 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 eles podem ser distribuídos e compartilhados. Use esse recurso somente para enviar artefatos por push a registros privados. Verifique se você está em conformidade com os termos que abrangem a redistribuição de artefatos não distribuíveis.

Diagnóstico e verificações de integridade

Verificar a integridade com 'az acr check-health'

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

Docker pull 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 repetição obterá sucesso.
  • Se docker pull falhar continuamente, pode haver um problema com o daemon do Docker. Normalmente, o problema pode ser atenuado reiniciando o daemon do Docker.
  • Se você continuar a ver esse problema após a reinicialização do daemon do Docker, o problema pode estar relacionado à conectividade de rede com o computador. Para verificar se a rede geral no computador está intata, execute o seguinte comando para testar a conectividade do ponto de extremidade. A versão mínima do az acr que contém esse comando de verificação de conectividade é 2.2.9. Atualize a CLI do Azure se você 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 de cliente do Docker.

O docker pull está lento

Use a ferramenta de velocidade para testar a velocidade de download da rede do computador. Se a rede do computador estiver lenta, considere usar a VM do Azure na mesma região que o registro para aumentar a velocidade da rede.

O docker push está lento

Use a ferramenta de velocidade para testar a velocidade de upload da rede do computador. Se a rede do computador estiver lenta, considere usar a VM do Azure na mesma região que o registro para aumentar a velocidade da rede.

Docker push obteve sucesso, mas o docker pull falha com erro: não autorizado: autenticação necessária

Esse erro pode ocorrer com a versão do Red Hat do daemon do Docker, onde --signature-verification está habilitado 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 servidor Fedora 28 tem as seguintes opções do daemon do docker:

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

Com --signature-verification=false ausente, 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 de configuração do daemon do Docker /etc/sysconfig/docker. Por exemplo:

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

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

    sudo systemctl restart docker.service
    

Os detalhes de --signature-verification podem ser encontrados executando man dockerd.

az acr login obteve sucesso, mas o docker falha com erro: não autorizado: autenticação necessária

Use uma URL do servidor em minúsculas, por exemplo, docker push myregistry.azurecr.io/myimage:latest, mesmo se o nome do recurso de registro estiver em maiúsculas ou em maiúsculas e minúsculas, como myRegistry.

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

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

{    
    "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 sistema. Por exemplo, para o Ubuntu 14.04, é /var/log/upstart/docker.log.
    Confira documentação do Docker para obter detalhes.

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

    Para acessar o log completo do daemon, algumas etapas adicionais podem ser necessárias:

    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.

As 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. Há dois motivos possíveis:

  • Atraso na atribuição de função 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 do ACR pode durar até dez minutos. Para atenuar, você pode docker logout e, em seguida, 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 dá suporte à exclusão da replicação inicial pelos usuários. A solução alternativa é incluir a replicação inicial criada no modelo, mas pular 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 erro InvalidAuthenticationInfo, especialmente usando a ferramenta curl com a opção -L, --location (para seguir os redirecionamentos). Por exemplo, buscar o blob usando curl com a opção -L e a autenticação básica:

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

pode resultar na resposta a seguir:

<?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 implementações de curl 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 opção -D - de curl e, em seguida, extraia: o cabeçalho 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

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, verá no máximo 100 repositórios ou marcas. Se o registro tiver mais de 100 repositórios ou tags, recomendamos que você use o navegador Firefox ou Chrome para listar todos eles.

Por que a portal do Azure não busca os repositórios ou tags?

O navegador pode não enviar a solicitação para buscar repositórios ou tags no servidor. Pode haver vários motivos, 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 AD
  • Erros DNS

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

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

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

  • Os registros clássicos não são mais compatíveis. Atualize para uma camada de serviço com suporte usando o az acr update ou o portal do Azure.
  • A imagem ou o repositório pode estar bloqueado para que não possa ser excluído ou atualizado. Use o comando az acr repository show para exibir os atributos atuais.
  • Algumas operações não serão permitidas se a imagem estiver em quarentena. Saiba mais sobre a quarentena.
  • O registro pode ter atingido seu limite de armazenamento.

Formato de repositório inválido ou sem suporte

Se você vir um erro como "formato de repositório sem suporte", "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 a maiúscula e minúscula do nome. Os nomes de repositório válidos só podem incluir caracteres alfanuméricos minúsculos, pontos, traços, sublinhados e barras invertidas.

Como posso coletar rastreamentos de http no Windows?

Pré-requisitos

  • Habilitar a descriptografia de HTTPS no Fiddler
  • Habilite o Docker para usar um proxy por meio da interface do usuário do Docker.
  • Não se esqueça de reverter ao concluir. O Docker não funcionará se esse recurso estiver habilitado e se o Fiddler não estiver em execução.

Contêineres do Windows

Configure o proxy do Docker para 127.0.0.1:8888

Contêineres do Linux

Encontre o IP do comutador virtual da 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 posso 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 posso incluir a pasta. git no comando az acr build?

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

!.git/**

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

As tarefas dão suporte a GitLab para gatilhos de origem?

No momento, não há suporte ao GitLab para gatilhos de origem.

Para qual serviço de gerenciamento de repositório git as tarefas dão suporte?

Serviço git Contexto de origem Compilação manual Compilação automática por meio do gatilho de confirmação
GitHub https://github.com/user/myapp-repo.git#mybranch:myfolder Sim Sim
Azure Repos https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder Sim Sim
GitLab https://gitlab.com/user/myapp-repo.git#mybranch:myfolder Sim Não
BitBucket https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder Sim Não

Executar solução de problemas de mensagem de erro

Mensagem de erro Guia de Soluçã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 na tarefa do ACR. Esse é um erro transitório e ocorre quando a atribuição de função da identidade gerenciada não foi propagada. Aguardando alguns segundos antes de tentar novamente.

Integração de CI/CD

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

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

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

A política interna do Azure a seguir, quando definida com o status de política, impedirá que o usuário habilite o usuário administrador em seu Registro.

Política interna do Azure Status de política Status de administração
Configurar registros de contêiner para desabilitar a conta de administrador local. Modificar Desabilitar
Os registros de contêiner devem ter a conta de administrador local desabilitada. Negar Desabilitar
Os registros de contêiner devem ter a conta de administrador local desabilitada. Audit sem conformidade

Próximas etapas

  • Saiba mais sobre o Registro de Contêiner do Azure.