Quiero resolver el error "cannotpullcontainererror" para poder iniciar mis tareas de Amazon Elastic Container Service (Amazon ECS) en AWS Fargate.
Descripción corta
El error "cannotpullcontainererror" puede impedir que se inicien las tareas de Amazon ECS en Fargate. Para estas tareas, las configuraciones de red de Amazon Virtual Private Cloud (Amazon VPC) deben permitir a Amazon ECS acceder al repositorio donde está almacenada la imagen. Sin la configuración de red correcta, Amazon ECS en Fargate no puede extraer la imagen y el contenedor no puede iniciarse.
Resolución
Para resolver el error "cannotpullcontainererror", completa las siguientes tareas.
Confirmación de que la VPC permite que la infraestructura de Amazon ECS llegue al repositorio de imágenes
Las tablas de enrutamiento asociadas a las subredes en las que se crea la tarea deben permitir que la infraestructura de Amazon ECS llegue al punto de enlace del repositorio. Puedes acceder al punto de enlace a través de una puerta de enlace de Internet, una puerta de enlace de NAT o puntos de enlace de VPC.
En el caso de las configuraciones que no utilizan AWS PrivateLink, sigue estos pasos:
- Abre la consola de Amazon VPC.
- En el panel de navegación, selecciona Subredes.
- Selecciona la subred que utiliza tu tarea de ECS Fargate.
- Selecciona la pestaña Route Table (Tabla de enrutamiento).
- En la columna Destination (Destino), confirma que la ruta predeterminada (0.0.0.0/0) de la tabla de enrutamiento permite el acceso público a Internet. Puedes acceder a través de una puerta de enlace NAT o una puerta de enlace de Internet.
Importante: La puerta de enlace NAT o la puerta de enlace de Internet deben ser el destino de la ruta predeterminada. Si quieres ver ejemplos de tablas de enrutamiento, consulta Opciones de enrutamiento de ejemplo. Si no usas una puerta de enlace NAT o una puerta de enlace de Internet, confirma que la configuración personalizada permita el acceso público a Internet.
Si usas una puerta de enlace de Internet (subredes públicas), confirma que la tarea tenga asignada una IP pública. Al crear la tarea o el servicio, establece Auto-assign public IP (Asignación automática de IP pública) en Enabled (Activada) en la sección VPC and security groups (VPC y grupos de seguridad).
En el caso de configuraciones que usan PrivateLink, confirma que los grupos de seguridad de tus puntos de enlace de VPC permiten que la infraestructura de Fargate los utilice.
Nota: Las tareas de Amazon ECS hospedadas en Fargate que utilizan la versión 1.3.0 o una anterior requieren el punto de enlace de VPC com.amazonaws.region.ecr.dkr de Amazon Elastic Container Registry (Amazon ECR). Estas tareas también requieren el punto de enlace de la puerta de enlace de Amazon Simple Storage Service (Amazon S3). Las tareas de Amazon ECS alojadas en Fargate que utilizan la versión 1.4.0 o posterior requieren los puntos de enlace de VPC de Amazon ECR com.amazonaws.region.ecr.dkr y com.amazonaws.region.ecr.api. Estas tareas también requieren el punto de enlace de la puerta de enlace de Amazon S3.
Para las configuraciones que usan PrivateLink, completa los pasos siguientes:
- Abre la consola de Amazon VPC.
- En el panel de navegación, elige Endpoints (Puntos de enlace).
- Selecciona el punto de enlace de la lista de puntos de enlace y, a continuación, selecciona la pestaña Subnets (Subredes). Los puntos de enlace de VPC com.amazonaws.region.ecr.dkr y com.amazonaws.region.ecr.api de Amazon ECR aparecen en la lista de subredes y están asociados a las subredes de Fargate. La puerta de enlace de Amazon S3 también está en la lista de subredes.
Nota: Si una subred no aparece en la lista, selecciona Manage Subnets (Administrar subredes). A continuación, selecciona la subred en función de tu Availability Zone (Zona de disponibilidad). Luego, selecciona Modify Subnets (Modificar subredes).
- Selecciona la pestaña Policy (Política) y, a continuación, confirma que se cumplen los requisitos correctos de la política.
- Confirma que el grupo de seguridad asociado a los puntos de enlace de VPC com.amazonaws.region.ecr.api y com.amazonaws.region.ecr.dkr permita las conexiones entrantes en el puerto 443 desde las tareas de Amazon ECS para Fargate. Para confirmar esta configuración, selecciona el punto de enlace de la lista.
- Selecciona la pestaña Security Groups (Grupos de seguridad).
- En Group ID (ID de grupo), selecciona el ID de grupo de seguridad.
- Selecciona la pestaña Inbound rules (Reglas de entrada) y, a continuación, confirma que puedes ver la regla que permite 443 conexiones desde tus tareas de ECS en Fargate.
Comprobación del conjunto de opciones DHCP de VPC
Sigue estos pasos:
- Abre la consola de Amazon VPC.
- En el panel de navegación, selecciona Your VPCs (Tus VPC).
- Selecciona la VPC que contiene la tarea de Fargate.
- En la pestaña Details (Detalles), anota la configuración del conjunto de opciones de DHCP.
- En el panel de navegación, selecciona DHCP Options Sets (Conjuntos de opciones de DHCP).
- Selecciona el conjunto de opciones de DHCP que ha anotado.
- Selecciona Actions (Acciones) y, a continuación, View details (Ver detalles).
- Confirma que los Domain name servers (Servidores de nombres de dominio) esté establecido en AmazonProvidedDNS. Si no está establecido en AmazonProvidedDNS, configura el reenvío de DNS condicional.
Comprobación de los permisos del rol de ejecución de tareas
Sigue estos pasos:
- Abre la consola de AWS Identity and Access Management (IAM).
- En el panel de navegación, selecciona Roles.
- Selecciona el rol de ejecución de tareas que utilizan las tareas de Fargate.
- Confirma que el rol de ejecución de tareas tiene los permisos necesarios para extraer una imagen de Amazon ECR.
Comprobación de que la imagen existe
Sigue estos pasos:
- Abre la consola de Amazon ECR.
- Selecciona el repositorio de Amazon ECR del que la tarea de Fargate extraerá la imagen.
- Confirma que el URI y la etiqueta de Amazon ECR coinciden con los que se han especificado en la definición de la tarea. Si falta la imagen, comprueba si hay una política de ciclo de vida que administre las imágenes.
Nota: Si no usas Amazon ECR, confirma que puedes ver image:tag en el repositorio de imágenes especificado.
Comprobación de que el almacenamiento efímero se ha asignado a la tarea de Fargate
De forma predeterminada, a las tareas de Fargate se les asignan 20 GiB de almacenamiento efímero. Si el tamaño de la imagen es demasiado grande, aparecerá un error similar al siguiente:
"CannotPullContainerError: ref pull has been retried 1 time(s): failed to extract layer no space left on device: unknown"
Nota: Dado que este almacenamiento se usa para archivos temporales, registros y otros procesos, es posible que aparezca el error aunque la imagen tenga un tamaño más pequeño.
Para resolver el problema, modifica la asignación de ephemeralStorage en la definición de la tarea. Para más información, consulta Almacenamiento efímero de tareas de Fargate para Amazon ECS.
Nota: Las tareas de Fargate que utilizan la versión de la plataforma 1.4.0 o una posterior reciben un mínimo de 20 GiB de almacenamiento efímero. La cantidad total de almacenamiento efímero se puede aumentar hasta un máximo de 200 GiB.
Información relacionada
Errores de tareas de CannotPullContainer en Amazon ECS
Puntos de enlace de VPC de la interfaz de Amazon ECR (AWS PrivateLink)
Almacenamiento efímero de tareas de Fargate para Amazon ECS
Puntos de enlace de VPC de la interfaz de Amazon ECS (AWS PrivateLink)
Migración a la versión 1.4.0 de la plataforma Linux en Amazon ECS