¿Por qué Code Engine no puede extraer una imagen?

Al implementar una aplicación de Code Engine o al ejecutar un trabajo, aparece un mensaje de error que incluye Unable to pull the image.

Para resolver este problema, confirme que la imagen existe y que tiene acceso a la imagen. Comprueba que se cumplan las siguientes condiciones.

  • Para confirmar que la imagen de tu aplicación o trabajo existe, consulta el mensaje de error para obtener información sobre el fallo.

  • Para implementar aplicaciones o ejecutar tareas en Code Engine, primero debes crear una imagen de contenedor que contenga todos los artefactos de tiempo de ejecución que tu aplicación necesita para funcionar, como las bibliotecas de tiempo de ejecución. Puedes utilizar muchos métodos diferentes para crear la imagen del contenedor, entre ellos compilar tu aplicación a partir del código fuente mediante la función de compilación de imágenes de contenedor disponible en Code Engine. La imagen se puede descargar desde un registro de imágenes público o privado. Para obtener más información sobre el acceso a registros privados, consulte Adición de acceso a un registro de contenedores privado.

  • Si utiliza el mandato ibmcloud ce app create, ibmcloud ce job create o ibmcloud ce jobrun submit en la CLI Code Engine, especifique el nombre de la imagen que se utiliza para la aplicación o el trabajo utilizando el formato REGISTRY/NAMESPACE/REPOSITORY:TAG donde REGISTRY y TAG son opcionales. Si no se especifica REGISTRY, el valor predeterminado es docker.io. Si no se especifica TAG, el valor predeterminado es latest. Revise estos mandatos para obtener más información sobre el formato que se debe utilizar para especificar el registro de imágenes.

Prueba las siguientes soluciones para resolver tu problema.

  1. No tiene autorización. Si no tienes los permisos necesarios para acceder a la imagen a la que se hace referencia, la creación de la aplicación no se completa y se produce un error. Se recibe un mensaje de error que contiene Unable to pull.

    • Para confirmar que puede acceder a la imagen de referencia, verifique la ubicación de la imagen y confirme que tiene permisos para acceder a la imagen.

    • Compruebe que ha añadido acceso de registro a Code Engine y que está utilizando el secreto de registro correcto, si la imagen se encuentra en un registro de imágenes de contenedor, como por ejemplo Docker Hub o IBM Cloud® Container Registry. Para obtener más información sobre cómo trabajar con imágenes en un registro de imágenes de contenedor, consulte Adición de acceso a un registro de contenedores privado.

  2. Se ha superado la cuota de registro de contenedor.

      ibmcloud ce jobrun events --jobrun myjobrun
    
    • Si el error que aparece en los eventos del sistema es similar al siguiente mensaje, esto indica que se ha superado la cuota del registro. Considere la posibilidad de actualizar su plan. Para obtener información sobre los planes de servicio y límites de cuota de IBM Cloud® Container Registry, consulte Acerca de 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. El registro de contenedor necesita autenticación.

    • Si el error que aparece en los eventos del sistema es similar al siguiente mensaje, esto indica que no se dispone de acceso al Registro o que dicho acceso podría requerir autorización. Comprueba que tus credenciales tengan los permisos de acceso adecuados al 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 no puede encontrar la imagen en el registro de contenedor.

    En este escenario, la imagen existe y el acceso al registro funciona, pero Code Engine encuentra una imagen distinta de la imagen que esperaba para una revisión de aplicación específica. El resumen de imagen de registro de contenedor no coincide con el resumen esperado de la imagen para una revisión de aplicación.

    Cuando implementas tu aplicación o una nueva revisión de la misma, se descarga e implementa la última versión de la imagen de contenedor a la que haces referencia, a menos que se especifique una etiqueta para la imagen. Si se especifica una etiqueta para la imagen, se utiliza la imagen etiquetada para el despliegue.

    Si crea una versión más reciente de la imagen con la misma etiqueta que la imagen original a la que hace referencia la aplicación, la imagen original se sobrescribe en el registro de contenedor. Sin embargo, Code Engine no puede encontrar esta imagen más reciente porque la imagen más reciente tiene un resumen distinto al resumen de la revisión de la aplicación. La imagen asociada con la revisión de aplicación específica tiene un resumen de registro de contenedor exclusivo y Code Engine utiliza este resumen durante la vida de la revisión de la aplicación.

    Si crea una versión más reciente de una imagen con la misma etiqueta que la imagen original, la imagen original se sobrescribe en el registro de contenedor y se descodifica. La imagen más reciente está etiquetada, y esta imagen más reciente tiene un resumen diferente. La aplicación Code Engine no utiliza esta imagen más reciente porque la imagen más reciente tiene un resumen distinto al resumen de la imagen a la que hace referencia la revisión de la aplicación. Code Engine todavía puede crear nuevas instancias de la revisión de la aplicación si la imagen a la que se hacía referencia originalmente todavía existe. Si la imagen referenciada originalmente por la aplicación no existe, Code Engine no encuentra el resumen de imagen esperado y la aplicación falla porque no puede extraer la imagen. Tenga cuidado al limpiar y suprimir imágenes y al configurar políticas de retención para el registro de contenedor. La sobrescritura de una imagen etiquetada no es problemática. Sin embargo, se pueden producir problemas si sobrescribe una imagen con una política de retención habilitada que suprime la imagen sin etiquetar, o si desencadena manualmente una limpieza de imágenes sin etiquetar.

    Si el error en los sucesos del sistema es similar al siguiente mensaje, este error indica que Code Engine no puede extraer la imagen del espacio de nombres del registro. Compruebe que la etiqueta de la imagen apunta al resumen de imagen correcto.

    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 utilizar una imagen más reciente que se ha enviado con la misma etiqueta con la aplicación, debe actualizar la aplicación para crear una nueva revisión de aplicación que haga referencia a la imagen etiquetada más reciente.

  5. Code Engine no puede autenticarse en el registro de su contenedor.

    En este escenario, su imagen existe, el acceso al registro funciona y el secreto de registro configurado es válido, pero Code Engine no puede autenticarse en el registro de su contenedor. Es posible que aparezca un mensaje de error similar al que se muestra a continuación:

    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...
    

    Compruebe si ha habilitado Restrict IP address access para su cuenta (consulte Permitir direcciones IP específicas ). Si está activada, sólo las direcciones IP permitidas pueden autenticarse en IBM Cloud®, para su cuenta. Esto evitará que Code Engine se autentique en el registro de su contenedor y, por lo tanto, no podrá extraer su imagen. Deberá añadir las direcciones IP public y private de su proyecto Code Engine. Consulte Code Engine direcciones IP públicas y privadas para saber cómo identificar estas direcciones IP.

Próximos pasos

Para obtener más información sobre la resolución de problemas de imágenes, consulte Depuración de imágenes.

Para obtener más información sobre la resolución de problemas de apps, trabajos y compilaciones con consideraciones para imágenes, consulte los temas siguientes.