¿Cómo puedo resolver el error «CannotPullContainerError: API error» en Amazon ECS?

5 minutos de lectura
0

Si extraigo imágenes con Amazon Elastic Container Registry (Amazon ECR), aparece el siguiente error: «CannotPullContainerError: API error.»

Descripción breve

Puede recibir este error debido a uno de los siguientes problemas:

  • Su tipo de lanzamiento no tiene acceso al punto de conexión de Amazon ECR
  • Su política de repositorios de Amazon ECR restringe el acceso a las imágenes del repositorio
  • Su rol de AWS Identity and Access Management (IAM) no tiene los permisos adecuados para extraer o enviar imágenes
  • No se encuentra la imagen
  • Su política de puntos de conexión de puerta de enlace de Amazon Virtual Private Cloud (Amazon VPC) deniega el acceso a Amazon Simple Storage Service (Amazon S3)

Para extraer imágenes, Amazon ECS debe comunicarse con el punto de conexión de Amazon ECR.

Para solucionar los errores de tareas de Amazon ECS que no se inician, use el runbook AWSSupport-TroubleshootECSTaskFailedToStart. A continuación, consulte los pasos de solución de problemas correspondientes a su problema.

Resolución

Importante:

  • Use el runbook AWSSupport-TroubleshootECSTaskFailedToStart en la misma región de AWS en la que se encuentran los recursos del clúster de ECS.
  • Cuando use el runbook, debe usar el ID de la tarea fallida más reciente. Si la tarea fallida forma parte de un servicio de Amazon ECS, use 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 ECS detenidas están visibles durante 1 hora después de entrar en el estado Detenido. El uso del identificador de tarea fallida más reciente evita que la limpieza del estado de la tarea interrumpa el análisis durante la automatización.

Para obtener instrucciones sobre cómo iniciar el runbook, consulte AWSSupport-TroubleshootECSTaskFailedToStart. Dependiendo del resultado de la automatización, use uno de los siguientes pasos manuales de solución de problemas.

Su tipo de lanzamiento no tiene acceso al punto de conexión de Amazon ECR

  1. Puede que esté ejecutando una tarea con un tipo de lanzamiento de Amazon Elastic Compute Cloud (Amazon EC2) y que la instancia de contenedor se encuentre en una subred privada. O bien, puede ejecutar una tarea con el tipo de lanzamiento de AWS Fargate en una subred privada. En cualquiera de estos casos, asegúrese de que la subred tenga una ruta a una puerta de enlace NAT en la tabla de enrutamiento.

  2. Si la tarea tiene un tipo de lanzamiento EC2 y la instancia de contenedor se encuentra en una subred pública, la instancia debe tener una dirección IP pública.

-o-

Si ejecuta una tarea con el tipo de lanzamiento Fargate en una subred pública, seleccione HABILITADO para Asignar automáticamente la IP pública al iniciar la tarea. Esto permite que la tarea tenga acceso a la red saliente para extraer una imagen.

  1. Configure la puerta de enlace NAT en su VPC para enrutar las solicitudes a Internet.
    Nota: Puede usar AWS PrivateLink como alternativa a una puerta de enlace NAT.

  2. Si usa AWS PrivateLink para Amazon ECR, compruebe la configuración del grupo de seguridad asociado a los puntos de conexión de VPC de Amazon ECR. Debe permitir el tráfico entrante a través de HTTPS (puerto 443) desde el grupo de seguridad de su CIDR de VPC, su instancia de contenedor o su tarea o servicio de Fargate.

  3. Confirme que el grupo de seguridad adjunto a su instancia y a la tarea de Fargate permita el acceso saliente siguiente: HTTPS en el puerto 443, DNS (UDP y TCP) en el puerto 53 y la lista de control de acceso de la red (ACL de la red) de la subred.

Su política de repositorios de Amazon ECR restringe el acceso a las imágenes del repositorio

Consulte su política de repositorios de Amazon ECR para obtener información sobre las restricciones de acceso al repositorio. El siguiente ejemplo de política de repositorio permite a los usuarios de IAM enviar y extraer imágenes:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/push-pull-user-1",
          "arn:aws:iam::123456789012:user/push-pull-user-2"
        ]
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

Su rol de IAM no tiene los permisos adecuados para extraer imágenes

Si ejecuta una tarea con un tipo de lanzamiento de EC2, compruebe los permisos del rol de IAM de instancia asociado al perfil de instancia. Debe tener 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.

Si ejecuta una tarea con un tipo de lanzamiento de Fargate, confirme que AmazonECSTaskExecutionRolePolicy tiene los permisos necesarios.

No se encuentra la imagen

Para confirmar el nombre correcto de la imagen en el URI, compruebe el parámetro de imagen en la sección de definiciones de contenedores de su definición de tarea.

**Nota:**Para extraer por etiqueta, use el formato de nombre de imagen siguiente: registry/repository[:tag]. Para extraer en función de los datos de resumen, use el formato registry/repository[@digest].

Su política de puntos de conexión de puerta de enlace de Amazon VPC deniega el acceso a Amazon S3

Si tiene una ruta a un punto de conexión de puerta de enlace de Amazon VPC para Amazon S3 en la tabla de rutas, complete los pasos siguientes:

  1. Verifique la política de acceso del punto de conexión de la puerta de enlace de Amazon VPC.

  2. Confirme que el punto de conexión de la puerta de enlace de Amazon VPC tenga la política correcta para tener acceso al bucket de S3.

Información relacionada

Errores de tareas CannotPullContainer