Saltar al contenido

¿Cómo puedo solucionar los errores "CannotPullContainerError" cuando inicio una tarea de EC2 en Amazon ECS?

6 minutos de lectura
0

Cuando inicio una tarea de Amazon Elastic Compute Cloud (Amazon EC2) en Amazon Elastic Container Service (Amazon ECS), se muestra el error "CannotPullContainerError".

Descripción corta

El error CannotPullContainerError se produce por los siguientes motivos:

  • Una tarea de tipo inicio de Amazon EC2 no puede extraer la imagen porque configuraste la red de forma incorrecta.
  • Un rol de AWS Identity and Access Management (IAM) no tiene permisos para extraer imágenes.
  • Has alcanzado la cuota de velocidad de DockerHub.
  • El nombre o la etiqueta de la imagen no existen.
  • La definición de la tarea hace referencia a una imagen que se encuentra en otra cuenta de AWS.
  • El sistema de archivos está lleno.

Resolución

Uso del runbook AWSSupport-TroubleshootECSTaskFailedToStart para solucionar problemas

Para solucionar los problemas de las tareas de Amazon ECS que no se inician, utiliza el runbook AWSSupport-TroubleshootECSTaskFailedToStart. Cuando ejecutes el runbook, debes usar el ID de la tarea fallida más reciente. Si la tarea fallida forma parte de un servicio de Amazon ECS, usa la tarea fallida más reciente del servicio. La tarea fallida debe estar visible en ECS:DescribeTasks durante la automatización. De forma predeterminada, las tareas de Amazon ECS están visibles durante 1 hora después de entrar en el estado Detenido.

Para iniciar el runbook, consulta AWSSupport-TroubleshootECSTaskFailedToStart. Según el resultado de la automatización, utiliza una de las siguientes resoluciones.

Importante: Usa el runbook AWSSupport-TroubleshootECSTaskFailedToStart en la misma región de AWS en la que se encuentran los recursos del clúster de Amazon ECS.

La configuración de red de tu instancia de contenedor de Amazon ECS es incorrecta

Si tu instancia de contenedor de Amazon ECS no tiene conexión a Internet, no podrás llegar al punto de enlace de Amazon Elastic Container Registry (Amazon ECR). Sin una conexión al punto de enlace, la instancia no podrá extraer la imagen. Para comprobar que tu instancia de contenedor de Amazon ECS tiene acceso a Internet, lleva a cabo las siguientes acciones:

Tu rol de IAM no tiene permisos para extraer imágenes

Confirma que el rol de IAM de la instancia asociado al perfil de instancia tenga permisos para acceder al repositorio de Amazon ECR.

Nota: La política administrada de AWS AmazonEC2ContainerRegistryReadOnly proporciona los permisos mínimos necesarios para extraer imágenes.

Has alcanzado la cuota de tasa de extracción de DockerHub

Si estás intentando extraer una imagen de DockerHub y has alcanzado la cuota de tasa de extracción, recibirás el mensaje de error siguiente:

"CannotPullContainerError: inspect image has been retried 5 time(s): httpReaderSeeker: failed open: unexpected status code https://registry-1.docker.io/v2/manifests/sha256:2bb501e6429 Too Many Requests - Server message: toomanyrequests:"

Para resolver este problema, consulta ¿Cómo puedo resolver el error "CannotPullContainerError: You have reached your pull rate limit" en Amazon ECS?

El nombre o la etiqueta de la imagen no existen

Si defines una imagen o etiqueta alojada en Amazon ECR pero la imagen o la etiqueta no existen, recibirás el siguiente error:

"Cannotpullcontainererror: pull image manifest has been retried 1 time(s): failed to resolve ref 123456789.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: 123456789**.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: not found**"

Para resolver este problema, comprueba que el campo de imagen tenga el valor correcto en la definición de la tarea. Confirma que el repositorio correspondiente y la etiqueta existan en el registro de contenedores del que se va a realizar la extracción.

Si la tarea extrae una imagen de un registro distinto de Amazon ECR y le falta información, recibirás otro error. Si la imagen no existe, la etiqueta no existe o no has proporcionado las credenciales del registro, se mostrará el error siguiente:

"Cannotpullcontainererror: pull image manifest has been retried 1 time(s): failed to resolve ref docker.io/library/invalid-name:non-existenttag: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed"

Para resolver este problema, verifica el campo de imagen en la definición de la tarea. Confirma que la imagen existe en el registro de contenedores correspondiente. Si la imagen existe, asegúrate de proporcionar las credenciales correctas. Para obtener más información, consulta Uso de imágenes de contenedores que no sean de AWS en Amazon ECS.

La imagen a la que se hace referencia en la definición de la tarea está en otra cuenta

Si la imagen está en otra cuenta, es posible que se muestre el siguiente mensaje de error:

"Cannotpullcontainererror: pull access denied for 123456789***.dkr.ecr.us-east-1.amazonaws.com/image-name:tag, repository does not exist or may require 'docker login': denied: User: arn:aws:sts::012345678**:assumed-role/role-name/ec2 instance id is not authorized to perform: ecr:BatchGetImage on resource: arn:aws:ecr:us-east-1:123456789*:repository/image-name:tag because no resource-based policy allows the ecr:BatchGetImage action"

Para resolver este problema, debes permitir la acción ecr:batchGetImage en las políticas del repositorio de la cuenta en la que se encuentra la imagen.

Por ejemplo, la instancia asociada a tu clúster de Amazon ECS está en la cuenta A y la definición de la tarea hace referencia a una imagen de la cuenta B. Las políticas de repositorio de la cuenta B deben permitir que ecr:batchGetImage ocupe el rol de IAM de la instancia en la cuenta A. También debes activar el permiso entre cuentas en la política de repositorios. A continuación, confirma que la instancia de la cuenta A puede extraer la imagen de la cuenta B. Para obtener más información, consulta ¿Cómo puedo permitir que una cuenta secundaria envíe o extraiga imágenes de mis repositorios de imágenes de Amazon ECR

El sistema de archivos está lleno

Si el sistema de archivos está lleno, recibirás el siguiente error:

"CannotPullContainerError: write /var/lib/docker/tmp/GetImageBlob2923440728: no space left on device"

Para solucionar este problema, toma las siguientes medidas: