Solução de problemas

Nesta seção explicamos como solucionar problemas comuns do Container Registry e Docker.

Projetos de escopo de domínio

Se você receber o erro invalid reference format, pode ser que você tenha um projeto com escopo no domínio.

Se seu projeto estiver no escopo de seu domínio, o ID do projeto incluirá o domínio e dois pontos, por exemplo: example.com:my-project. Consulte Projetos com escopo de domínio para saber como trabalhar com IDs de projeto que incluem um domínio.

Erro: status 405: "API v1 Registry está desativada".

Se um erro, como "v1 Registry API está desativada", for exibido sempre que você tentar extrair ou enviar imagens, verifique se o nome do host, código do projeto, nome da imagem, marcador ou resumo estão corretos.

Para ver os marcadores e resumo da imagem, execute o seguinte comando:

gcloud container images list-tags [HOSTNAME]/[PROJECT-ID]/[IMAGE]

Exemplo:

gcloud container images list-tags gcr.io/my-project/my-image

Para ver mais informações sobre como listar tags e resumos de imagem, consulte Como gerenciar imagens.

Problemas de permissão

As seções a seguir descrevem as soluções para problemas específicos de permissões. Certifique-se de que você tenha as permissões necessárias para realizar push ou pull. Veja Permissões e papéis.

Se você ativou o acesso uniforme no nível do bucket em um bucket de armazenamento usado pelo Container Registry, talvez tenha problemas para realizar push e pull para o Container Registry.

Para corrigir problemas de acesso, verifique se você tem as permissões necessárias para push ou pull. Essas permissões estão listadas em Permissões e papéis.

Se você encontrar um erro permission denied, como no exemplo a seguir:

FATA[0000] Post http://var/run/docker.sock/v1.17/images/gcr.io/container-engine-docs/example/push?tag=: dial unix /var/run/docker.sock: permission denied
ERROR: (gcloud.docker) A Docker command did not run successfully.
Tried to run: 'docker push gcr.io/container-engine-docs/example'
Exit code: 1

Talvez seja necessário adicionar você mesmo ao grupo de usuários docker.

Execute o seguinte comando no shell ou janela do terminal:

  sudo usermod -a -G docker ${USER}

Reinicie o sistema depois de adicionar você mesmo ao grupo de usuários docker.

Problemas de permissão ao comunicar com o Container Registry

Se for exibido um erro de permissão como este:

Permission denied: Unable to create the repository, please check that you have access to do so
  1. Verifique se o faturamento foi ativado para o projeto.

  2. Verifique seu acesso:

    1. Verifique se você está autenticado para gcloud executando o seguinte comando:

      gcloud init
      
    2. Certifique-se de que o Docker esteja configurado para usar gcloud como um assistente de credencial do Container Registry executando o seguinte comando:

      gcloud auth configure-docker
      
    3. Verifique se docker-credential-gcloud pode ser executado:

      docker-credential-gcloud list
      

      Será exibido um objeto JSON com o registro de destino como uma de suas chaves. Por exemplo:

      {
        "https://asia.gcr.io": "oauth2accesstoken",
        "https://eu.gcr.io": "oauth2accesstoken",
        "https://gcr.io": "oauth2accesstoken",
        "https://staging-k8s.gcr.io": "oauth2accesstoken",
        "https://us.gcr.io": "oauth2accesstoken"
      }
      
    4. Em seguida, verifique se você tem permissão para gravar no projeto do Cloud Storage de destino da imagem. Caso não tenha, peça para um administrador conceder acesso ao seu usuário e tente novamente.

    5. Se o problema persistir mesmo com a permissão correta, talvez falte no seu token de acesso um dos seguintes escopos:

      • https://www.googleapis.com/auth/devstorage.read_write
      • https://www.googleapis.com/auth/devstorage.full_control

      Para verificar, primeiro receba o token de acesso. Isso varia de um aplicativo para outro, por exemplo, se você estiver usando um token de acesso de uma conta de serviço padrão do Compute Engine, poderá seguir estas instruções para vê-lo.

      Assim que você receber o token de acesso, use este comando para verificar os escopos usados para conseguir o token:

      curl -H "Authorization: Bearer <your access token>" https://www.googleapis.com/oauth2/v1/tokeninfo
      

      Caso os escopos mencionados não estejam incluídos, corrija o problema para que eles sejam incluídos ao conseguir o token de acesso no seu código. Por exemplo, para tokens gerados especificamente para contas de serviço padrão na sua máquina virtual do Compute Engine, corrija a configuração do escopo para essa máquina e recrie o token.

Problemas de permissão ao enviar e extrair imagens

A instância de VM que envia ou extrai imagens precisa ser configurada corretamente, com as permissões do IAM e escopos de acesso necessários para acessar o bucket de armazenamento do Container Registry. Para mais informações sobre as configurações necessárias, consulte os requisitos para usar o Container Registry com o Google Cloud.

Limites de cota

Se você atingir o limite de cota do Container Registry, poderá ver uma mensagem de erro como esta:

Error: Status 429 trying to pull repository [...] "Quota Exceeded."

Para evitar atingir o limite de cota fixo, você pode:

  • Aumentar o número de endereços IP que conversam com o Container Registry. As cotas são por endereço IP.
  • Adicionar novas tentativas que introduzam um atraso. Por exemplo, você poderia usar retirada exponencial.

Ponto de extremidade de registro inválido com boot2docker

Se estiver com problemas para acessar o Container Registry de um ambiente boot2docker:

docker push gcr.io/example/sample

Error response from daemon: invalid registry endpoint https://gcr.io/v0/:
  unable to ping registry endpoint https://gcr.io/v0/
v2 ping attempt failed with error: Get https://gcr.io/v2/:
  x509: certificate has expired or is not yet valid
v1 ping attempt failed with error: Get https://gcr.io/v1/_ping:
  x509: certificate has expired or is not yet valid.
If this private registry supports only HTTP or HTTPS with an unknown CA
certificate, please add `--insecure-registry gcr.io` to the daemon's
arguments. In the case of HTTPS, if you have access to the registry's CA
certificate, no need for the flag; simply place the CA certificate at
/etc/docker/certs.d/gcr.io/ca.crt

Reinicie o boot2docker:

boot2docker stop
boot2docker start

Docker no Mac

Se encontrar qualquer problema com o Docker no Mac, será necessário tentar uma solução alternativa. Os erros podem incluir operações de envio e extração do Docker sem resposta ou um erro de rede como o seguinte:

Post https://us.gcr.io/v2/[repo name]/blobs/uploads/: dial tcp xx.xxx.xx.xx:xxx: i/o timeout

Se encontrar esses erros, siga as seguintes instruções:

  • Execute o comando docker-machine restart default no terminal do Mac para reiniciar o daemon do Docker.

  • Desative "Securely store docker logins in macOS keychain" no menu de preferências do Docker.

  • Certifique-se de executar a versão mais recente do Docker.