Compartilhar via


Não é possível efetuar pull de imagens do Registro de Contêiner do Azure para o Aplicativo Web do Azure

Este artigo fornece diretrizes para solucionar os erros mais comuns que você pode encontrar ao efetuar pull de imagens de um registro de contêiner do Azure para o Aplicativo Web do Azure.

Sintomas e solução de problemas inicial

Recomendamos que você inicie a solução de problemas verificando a integridade do registro de contêiner.

Para verificar a integridade do registro de contêiner, execute o seguinte comando:

az acr check-health --name <myregistry> --ignore-errors --yes

Se um problema for detectado, os resultados incluirão um código de erro e uma descrição. Para obter mais informações sobre esses erros e possíveis soluções, consulte Referência de erro de verificação de integridade.

Observação

Se você receber erros relacionados ao Helm ou ao Notary, isso não significa que o Registro de Contêiner ou o AKS não esteja funcionando ou tenha um problema. Ele apenas indica os problemas, como que o Helm ou o Notary não está instalado ou que a CLI do Azure não é compatível com a versão atualmente instalada do Helm ou do Notary.

Em seguida, identifique a mensagem de erro relacionada ao pull que é essencial para a solução de problemas:

  1. Faça logon no portal do Azure.
  2. Em seu aplicativo Web, selecione Log do Centro de>Implantação. Selecione a confirmação para exibir os detalhes do log. Você também pode visualizar os logs do processo de pull de imagem em tempo real verificando Fluxo de log na seção Monitoramento .

As seções a seguir ajudam você a solucionar os erros mais comuns exibidos nos logs do aplicativo Web.

Erro 1: Não autorizado

Head \" https://<acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": unauthorized

Solução para autenticação baseada em usuário Admin

O erro "não autorizado" pode ser causado por credenciais de administrador incorretas. Isso inclui o servidor de logon, nome de usuário ou senha que você configurou nas variáveis de ambiente do aplicativo Web.

Para resolver o problema, siga estas etapas:

  1. No portal do Azure, navegue até o contêiner do Registro. Na seção Configurações, selecione Chaves de acesso. Verifique as configurações de credenciais do usuário administrador do servidor de login, nome de usuário e senha.
  2. Acesse o aplicativo Web. Na seção Configurações, selecione Variáveis de ambiente.
  3. Verifique se as três variáveis configuradas para o registro de contêiner (servidor de logon, nome de usuário, senha) correspondem às configurações de credenciais do usuário administrador no contêiner de registro.

Solução para autenticação baseada em identidade gerenciada

Quando você usa a autenticação baseada em identidade gerenciada do Aplicativo Web do Azure, a Microsoft.ContainerRegistry/registries/pull/read permissão deve ser atribuída à identidade gerenciada para executar a ação de pull.

As funções internas do Azure que contêm a Microsoft.ContainerRegistry/registries/pull/read permissão são as seguintes:

  • AcrPull
  • AcrPush
  • Colaborador do leitor
  • Proprietário

Para obter mais informações, confira Funções e permissões do Registro de Contêiner do Azure.

Quando você inicia uma operação de pull do registro de contêiner, a função AcrPull é atribuída automaticamente à identidade gerenciada do Aplicativo Web do Azure. Você não precisa adicionar permissões manualmente. No entanto, você deve garantir que a criação da atribuição de função não esteja bloqueada, por exemplo, por uma política do Azure. Além disso, verifique se a atribuição de função não foi excluída.

Erro 2: o manifesto marcado por <tag> não foi encontrado

DockerApiException : Docker API responded with status code=NotFound, response={"message":"manifest for <acr-name>.azurecr.io/<repository>:<tag> not found: manifest unknown: manifest tagged by \"<tag>\" is not found"}

Solução: verifique se a tag existe

A mensagem de erro indica que a tag associada à imagem que você está tentando extrair não foi encontrada. Verifique se a tag existe no repositório e no registro associados.

Para usar a CLI do Azure para localizar as marcas no repositório e no registro associados, execute o seguinte comando:

az acr repository show-tags -n <ContainerRegistryName> --repository <RepositoryName>

Para usar o portal do Azure para localizar as marcas que estão no repositório e no registro associados, siga estas etapas:

Navegue até o contêiner do Registro. Em Serviços, selecione Repositórios, abra o repositório associado e verifique a lista de tags.

Observação

O comando az acr repository show-tags ou a verificação dos repositórios do portal do Azure só funcionará se as regras de rede do registro de contêiner permitirem.

Erro 3: O cliente com IP não tem permissão de acesso

DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Head \"https:// <acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": denied: client with IP '<web-app-outbound-ip>' is not allowed access. Refer https://aka.ms/acr/firewall to grant access."}

Solução 1: verifique se o firewall integrado do registro do contêiner permite o endereço IP do seu dispositivo

Por padrão, um registro de contêiner aceita conexões pela Internet de todas as redes. O registro de contêiner tem um firewall interno que pode restringir o acesso a endereços IP ou CIDRs específicos ou desabilitar totalmente o acesso à rede pública.

Esse problema pode ocorrer se os endereços IP do seu aplicativo Web estiverem bloqueados pelo firewall interno do registro de contêiner.

Para resolver esse problema, verifique se o firewall interno permite os endereços IP de saída do aplicativo Web que precisa extrair a imagem.

Para encontrar os endereços IP de saída do aplicativo Web, siga estas etapas:

  1. No portal do Azure, navegue até seu aplicativo Web.
  2. Na página Visão geral , localize Endereço IP de saída e selecione Mostrar mais para obter a lista completa dos endereços IP de saída

Para usar a CLI do Azure para localizar os endereços IP de saída do aplicativo Web, consulte Localizar endereços IP de saída no Serviço de Aplicativo do Azure.

Solução 2: Configurar a integração de rede virtual para o aplicativo Web

Se você precisar desabilitar totalmente o acesso à rede pública ou permitir apenas redes selecionadas no registro de contêiner sem adicionar manualmente os endereços IP do aplicativo Web, a opção alternativa será efetuar pull da imagem de forma privada. Para efetuar pull de imagens de forma privada, você precisa configurar o registro de contêiner usando um ponto de extremidade privado e habilitar a integração de rede virtual para o aplicativo Web.

Você pode configurar a integração de rede virtual no lado do aplicativo Web seguindo estas etapas:

  1. No portal do Azure, navegue até seu aplicativo Web e selecione Rede.

  2. Em Configuração de tráfego de saída, configure a integração de Rede Virtual, selecione Adicionar integração de rede virtual e especifique a assinatura, a rede virtual e a sub-rede.

  3. Na página Configuração de rede virtual, verifique se a opção Pull de imagem de contêiner está selecionada.

    Captura de tela da opção de pull de imagem de contêiner.

Para efetuar pull da imagem pela rede virtual, você deve habilitar Efetuar pull da imagem pela VNet no Centro de Implantação do aplicativo Web. Além disso, se o registro de contêiner tiver o acesso público desabilitado ou definido para redes específicas, você poderá receber a mensagem "Falha ao carregar marcas do ACR - falha", conforme mostrado no exemplo a seguir. Esse erro é esperado neste cenário. Se isso ocorrer, as opções suspensas para Imagem e Tag não estarão disponíveis. Você terá que inserir manualmente a imagem e a tag.

Captura de tela da mensagem de erro com falha ao carregar as Marcas do ACR.

Próximas etapas

Se essas diretrizes de solução de problemas não resolverem o problema, considere o seguinte:

Verifique os grupos de segurança de rede e as tabelas de rotas associadas às suas sub-redes. Se um dispositivo virtual, como um firewall, controlar o tráfego entre sub-redes, revise o firewall e suas regras de acesso.

Use o serviço Kudu para solução de problemas adicional. Você pode se conectar ao serviço Kudu. Por exemplo, use o Bash para testar a resolução DNS executando nslookup <acr-name>.azurecr.ioo , ou verifique a conectividade usando tcpping <acr-name>.azurecr.ioo .

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.