Solução de problemas

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

Projetos com escopo de domínio

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

Se o projeto tiver escopo de domínio, o código do projeto inclui o domínio e um sinal de dois-pontos, por exemplo: example.com:my-project. Consulte Projetos com escopo de domínio para saber como trabalhar com códigos de projetos 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]

Por 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 Somente a política do intervalo em um intervalo 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 um erro de permission denied for exibido, 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 seu nome de usuário 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 após adicionar seu nome de usuário 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. Certifique-se de que você tem autenticação do gcloud para executar o seguinte comando:

      gcloud init
      
    2. Confirme se o Docker está configurado para usar o gcloud como auxiliar de credencial do Container Registry executando o seguinte comando:

      gcloud auth configure-docker
      
    3. Em seguida, 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 https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<your access token>
      

      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.

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.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…