¿Cómo soluciono el error «DockerTimeoutError» en AWS Batch?
Los trabajos de mi entorno de computación de AWS Batch fallan y devuelven el siguiente error: «DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s». Quiero solucionar el error.
Descripción breve
Si las llamadas a la API Docker start y Docker create tardan más de cuatro minutos, AWS Batch devolverá un error DockerTimeoutError.
Nota: El límite de tiempo de espera predeterminado que establece el agente de contenedores de Amazon Elastic Container Service (Amazon ECS) es de cuatro minutos.
Este error se suele producir por los siguientes motivos:
- Los volúmenes de instancias de ECS del entorno de computación de AWS Batch están sometidos a una gran presión de E/S de los demás trabajos de la cola. Estos trabajos pueden agotar el saldo de ráfagas.
- Los contenedores de ECS detenidos no se limpian lo suficientemente rápido como para liberar el daemon de Docker. Si utiliza una imagen de máquina de Amazon (AMI) personalizada en lugar de la AMI predeterminada que proporciona AWS Batch, puede tener problemas con Docker.
Si ninguno de estos problemas está causando el error, tome las siguientes medidas para seguir buscando una solución:
- Revise sus registros de Docker para identificar el origen del error.
- Ejecute el script del recopilador de registros de Amazon ECS en las instancias de ECS del clúster de ECS que está asociado a su entorno de computación de AWS Batch.
Resolución
Resolución de problemas de saldo de ráfagas
Comprobación del saldo de ráfagas de su instancia de ECS
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Siga estos pasos:
- Abra la consola de Amazon ECS.
- En el panel de navegación, seleccione Clústeres. A continuación, seleccione el clúster que contenga su trabajo.
Nota: El nombre del clúster comienza con el nombre del entorno de procesamiento, seguido de _Batch_ y un hash aleatorio de números y letras. - Seleccione la pestaña Infraestructura.
- En la columna Infraestructura, debajo de la fila ** Instancias de contenedor**, elija su ID de instancia.
Nota: Para encontrar el identificador de instancia del trabajo con errores, ejecute el comando de la AWS CLI describe-jobs de AWS Batch. El identificador de instancia aparece en la salida de containerInstanceArn. - En la consola de Amazon EC2, asegúrese de que la instancia siga seleccionada. A continuación, en la sección Almacenamiento, elija el enlace de su volumeID.
- En la ventana emergente del dispositivo de bloques, en Volume ID, seleccione su volumen.
- Seleccione la pestaña Supervisión. A continuación, seleccione Saldo de ráfagas para comprobar sus métricas de saldo de ráfagas. Si su saldo de ráfagas baja a 0, quiere decir que se habrá agotado.
Creación de una plantilla de lanzamiento para su entorno de computación administrado
Nota: Si cambia la plantilla de lanzamiento, debe crear un nuevo entorno de computación.
Siga estos pasos:
- Abra la consola de Amazon EC2 y, a continuación, seleccione Plantillas de lanzamiento.
- Elija Crear plantilla de lanzamiento.
- En ID de AMI, seleccione la AMI optimizada para Amazon ECS predeterminada.
- En la sección Almacenamiento (volúmenes), elija un tipo de volumen en la columna Tipo de volumen. A continuación, introduzca un valor entero en la columna Tamaño (GiB).
Nota: Si elige SDD de IOPS provisionadas (io1) como tipo de volumen, introduzca un valor entero que esté permitido para las IOPS. - Elija Crear plantilla de lanzamiento.
- Use su nueva plantilla de lanzamiento para crear un nuevo entorno de computación administrado.
Creación de un entorno de computación de AWS Batch con su AMI
Nota: Si cambia la AMI, debe crear un nuevo entorno de computación porque no puede actualizar el parámetro ID de AMI.
Siga estos pasos:
- Abra la consola de Amazon EC2.
- Seleccione Lanzar instancia.
- Siga los pasos del asistente de configuración para crear su instancia.
Importante: En la página Adición de almacenamiento, modifique el tipo de volumen o el tamaño de su instancia. Cuanto mayor sea el tamaño del volumen, mayor será el rendimiento de referencia y más lento se repondrá el saldo de ráfagas. Para obtener un mejor rendimiento con cargas de E/S elevadas, cambie el volumen al tipo io1. - Cree una AMI de recursos de computación a partir de su instancia.
- Cree un entorno de computación para AWS Batch que incluya su ID de AMI.
Resolución de problemas de Docker
De forma predeterminada, el agente de contenedores de Amazon ECS limpia automáticamente las tareas detenidas y las imágenes de Docker que las instancias de contenedor no utilizan. Si ejecuta nuevos trabajos con imágenes nuevas, es posible que el almacenamiento de su contenedor se llene con imágenes de Docker que no utiliza. La AMI predeterminada de AWS Batch optimiza la configuración de limpieza de Amazon ECS.
Siga estos pasos:
- Utilice SSH para conectarse a la instancia de contenedor de su entorno de computación de AWS Batch.
- Para inspeccionar el agente de contenedor de Amazon ECS, ejecute el comando de Docker inspect ecs-agent. A continuación, revise la sección env de la salida.
Nota: Para agilizar la limpieza de tareas e imágenes, reduzca los valores de las siguientes variables:
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
ECS_IMAGE_CLEANUP_INTERVAL
ECS_IMAGE_MINIMUM_CLEANUP_AGE
ECS_NUM_IMAGES_DELETE_PER_CYCLE
También puede utilizar parámetros ajustables para la limpieza automática de tareas e imágenes. - Cree una AMI nueva con valores actualizados.
Alternativa:
Cree una plantilla de lanzamiento con los datos del usuario que incluya las nuevas variables de entorno.
Creación de una AMI nueva con valores actualizados
Siga estos pasos:
- Defina los parámetros de configuración del agente en el archivo /etc/ecs/ecs.config.
- Reinicie el agente de contenedores.
- Cree una AMI de recursos de computación a partir de su instancia.
- Cree un entorno de computación para AWS Batch que incluya su ID de AMI.
Creación de una plantilla de lanzamiento con los datos del usuario que incluya las nuevas variables de entorno
Siga estos pasos:
-
Cree una plantilla de lanzamiento con los datos de usuario.
Por ejemplo, los datos de usuario del siguiente archivo MIME de varias partes anulan la configuración predeterminada de limpieza de imágenes de Docker para un recurso de computación:
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config --==MYBOUNDARY==--
Para obtener más información sobre los archivos de varias partes de Mime, consulte MIME multi-part file en el sitio web de cloud-init.
-
Use su nueva plantilla de lanzamiento para crear un entorno de computación administrado.
Información relacionada
Servicios de AWS que publican métricas de CloudWatch
amazon-ecs-agent en el sitio web de GitHub
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 meses
- OFICIAL DE AWSActualizada hace 2 meses
- OFICIAL DE AWSActualizada hace un año