Por que o Code Engine não pode extrair uma imagem?

Ao implantar um aplicativo do Code Engine ou executar uma tarefa, você recebe uma mensagem de erro que contém Unable to pull the image.

Para solucionar esse problema, confirme se a imagem existe, e se você tem acesso à imagem. Verifique se as seguintes condições estão atendidas.

  • Para confirmar se a imagem do seu aplicativo ou trabalho existe, verifique a mensagem de erro para obter informações sobre a falha.

  • Para implantar aplicativos ou executar tarefas no Code Engine, é necessário primeiro criar uma imagem de contêiner que contenha todos os artefatos de tempo de execução de que seu aplicativo precisa para funcionar, como bibliotecas de tempo de execução. Você pode usar diversos métodos para criar a imagem do contêiner, incluindo a compilação do seu aplicativo a partir do código-fonte, utilizando o recurso de compilação de imagens de contêiner disponível em Code Engine. A sua imagem pode ser transferida por download por meio de um registro de imagem público ou privado. Para obter mais informações sobre como acessar registros privados, consulte Incluindo acesso a um registro privado de contêiner.

  • Se você usar o comando ibmcloud ce app create, ibmcloud ce job create ou ibmcloud ce jobrun submit na CLI do Code Engine, especifique o nome da imagem que é usada para seu aplicativo ou tarefa usando o formato REGISTRY/NAMESPACE/REPOSITORY:TAG em que REGISTRY e TAG são opcionais. Se REGISTRY não for especificado, o padrão será docker.io. Se TAG não for especificado, o padrão será latest Revise esses comandos para obter mais informações sobre o formato a ser usado para especificar o registro de imagem

Experimente as seguintes soluções para resolver seu problema.

  1. Você não é autorizado. Se você não tiver permissões para acessar a imagem referenciada, a criação do aplicativo não será concluída e ocorrerá um erro. Você recebe uma mensagem de erro que contém: Unable to pull.

    • Para confirmar se é possível acessar a imagem referenciada, verifique o local da sua imagem e confirme se você tem permissões para acessá-la.

    • Verifique se você incluiu o acesso de registro ao Code Engine e se você está usando o segredo de registro correto, se a imagem estiver localizada em um registro de imagem de contêiner, como Docker Hub ou IBM Cloud® Container Registry. Para obter mais informações sobre como trabalhar com imagens em um registro de imagem de contêiner, consulte incluindo acesso a um registro de contêiner privado.

  2. A cota de registro do contêiner foi excedida

      ibmcloud ce jobrun events --jobrun myjobrun
    
    • Se o erro nos eventos do sistema for semelhante à mensagem a seguir, isso indica que a cota do Registro foi excedida. Considere fazer upgrade do seu plano. Para obter informações sobre os planos de serviço e limites de cota do IBM Cloud® Container Registry, consulte Sobre IBM Cloud Container Registry.
    403 Forbidden - Server message: denied: You have exceeded your pull traffic quota for the current month. Review your pull traffic quota and pricing plan.
    
  3. O registro de contêiner precisa de autenticação..

    • Se o erro nos eventos do sistema for semelhante à mensagem a seguir, isso indica que não há acesso ao Registro ou que tal acesso pode exigir autorização. Verifique se suas credenciais têm acesso adequado ao Registro.
    Failed to pull image "<image_name>": rpc error: code = Unknown desc = failed to pull and unpack image "<image_name:image_tag>": failed to resolve reference <image_name:image_tag>": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed.
    
  4. Code Engine não pode localizar sua imagem em seu registro de contêiner.

    Nesse cenário, sua imagem existe e o acesso de registro funciona, mas Code Engine localiza uma imagem diferente da imagem que estava esperando para uma revisão de aplicativo específica. A compilação de imagem do registro de contêiner não corresponde à compilação esperada da imagem para uma revisão do aplicativo

    Ao implantar seu aplicativo ou uma nova revisão do aplicativo, a versão mais recente da imagem de contêiner referenciada é baixada e implantada, a menos que seja especificada uma tag para a imagem. Se uma tag for especificada para a imagem, a imagem marcada será usada para a implementação.

    Se você criar uma versão mais recente da imagem com a mesma tag da imagem original que foi referenciada por seu aplicativo, a imagem original será sobrescrita no registro de contêiner. No entanto, Code Engine não pode localizar essa imagem mais recente porque a imagem mais recente tem uma compilação diferente da compilação para a revisão do aplicativo. A imagem associada à sua revisão de aplicativo específica tem uma compilação de registro de contêiner exclusiva e o Code Engine usa essa compilação para a vida de sua revisão de aplicativo.

    Se você criar uma versão mais recente de uma imagem com a mesma tag que a imagem original, a imagem original será sobrescrita no registro de contêiner e será desmarcada. A imagem mais recente é identificada e essa imagem mais recente tem uma compilação diferente.... Seu aplicativo Code Engine não usa essa imagem mais nova porque a imagem mais recente tem uma compilação diferente da da imagem que é referenciada pela revisão do aplicativo. Code Engine ainda pode criar novas instâncias da revisão do aplicativo se a imagem que foi referenciada originalmente ainda existir. Se a imagem originalmente referenciada por seu aplicativo não existir, o Code Engine não localizará a compilação de imagem esperada e o aplicativo falhará porque não pode puxar a imagem. Tome cuidado ao limpar e excluir imagens e ao configurar políticas de retenção para o seu registro de contêiner Sobrescrever uma imagem identificada não é problemático.. No entanto, podem ocorrer problemas se você sobrescrever uma imagem com uma política de retenção ativada que exclui a imagem não identificada ou se acionar manualmente uma limpeza de imagens não identificadas.

    Se o erro nos eventos do sistema for semelhante à mensagem a seguir, esse erro indica que o Code Engine não pode extrair a imagem do namespace de registro. Verifique se a tag para a sua imagem aponta para a compilação de imagem correta

    Unable to pull the image. Image "<image_name>" does not exist in the registry namespace. Check your registry repository and tag. If the image exists in the repository, check whether the specified tag points to the correct image digest.
    

    Para usar uma imagem mais recente que foi enviada por push com a mesma tag com seu aplicativo, deve-se atualizar seu aplicativo para criar uma nova revisão de aplicativo que referencie a imagem identificada mais recente.

  5. Code Engine não pode se autenticar no registro do contêiner.

    Nesse cenário, a imagem existe, o acesso ao registro funciona e o segredo do registro configurado é válido, mas o site Code Engine não consegue se autenticar no registro do contêiner. Você poderá ver uma mensagem de erro semelhante à mostrada abaixo:

    ErrImagePull : failed to pull and unpack image "<image name>": failed to resolve reference "<image name>": failed to authorize: failed to fetch oauth token: unexpected status from GET request to...
    

    Verifique se você ativou Restrict IP address access para sua conta (consulte Permissão de endereços IP específicos ). Se estiver ativado, somente os endereços IP permitidos poderão se autenticar em IBM Cloud®, para sua conta. Isso impedirá que o Code Engine se autentique no registro do contêiner e, portanto, não conseguirá extrair a imagem. Você precisará adicionar os endereços IP public e private do seu projeto Code Engine. Consulte Code Engine endereços IP públicos e privados para saber como identificar esses endereços IP.

Próximas etapas

Para saber mais sobre as imagens de resolução de problemas, consulte Depurando imagens

Para obter mais informações sobre resolução de problemas de aplicativos, tarefas e construções com considerações para imagens, consulte os tópicos a seguir.