He actualizado mi servicio Amazon Elastic Container Service (Amazon ECS) para ejecutar tareas con la imagen más reciente, pero algunas tareas no utilizan la nueva imagen. O bien, mis tareas de Amazon ECS fallan y recibo el error CannotPullContainerError.
Descripción corta
Al actualizar una imagen en Amazon ECS, es posible que reciba el siguiente mensaje de error:
«CannotPullContainerError: pull image manifest has been retried 1 time(s): failed to resolve ref account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: not found»
Cuando actualiza una imagen, también debe actualizar el servicio. De forma predeterminada, Amazon ECS resuelve las etiquetas de imagen del contenedor que se especifican en la definición de la tarea en los resúmenes de imágenes de contenedor.
En el caso de un servicio que ejecuta y mantiene una sola tarea, Amazon ECS usa la tarea para establecer resúmenes de imágenes para los contenedores de tareas. Para un servicio que ejecuta y mantiene varias tareas, Amazon ECS usa la primera tarea que el programador de servicios inició durante el despliegue. Para actualizar el resumen de la imagen al actualizar la etiqueta de imagen en la definición de la tarea, actualice el servicio y utilice la configuración Forzar un nuevo despliegue.
Para obtener más información sobre el comportamiento de las imágenes, consulte Resolución de imágenes de contenedor.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Asegurarse de que el servicio utilice la imagen más reciente
Para asegurarse de que el servicio utiliza la imagen más reciente, actualice el servicio Amazon ECS y, a continuación, utilice la opción Forzar un nuevo despliegue. O bien, ejecute el siguiente comando update-service de la AWS CLI:
aws ecs update-service --cluster clustername --service servicename --force-new-deployment
Nota: Sustituya clustername por el nombre del clúster y servicename por el nombre del servicio.
Para usar un resumen de imagen específico, actualice la definición de la tarea y, a continuación, modifique la sección URI de la imagen:
imageUri@imagedigest
"image": "accountid.dkr.ecr.region-name.amazonaws.com/image:latest@sha256:da04638bxxxxxxxxxx,"
Resolución del error «El resumen de la imagen no existe»
Si recibe el error El resumen de la imagen no existe, compruebe si ha eliminado la imagen.
Para comprobar si el resumen de la imagen existe en un repositorio de Amazon Elastic Container Registry (Amazon ECR), ejecute el comando describe-images:
aws ecr describe-images --repository-name repositoryname --region regionname --query 'sort_by(imageDetails,& imagePushedAt)[*]'
Nota: Sustituya repositoryname por el nombre del repositorio y regionname por su región de AWS.
El resultado del comando muestra todas las imágenes del repositorio. Si el resumen de la imagen no existe, consulte el historial de eventos de AWS CloudTrail para ver la llamada a la API BatchDeleteImage para determinar el motivo por el que se eliminó la imagen. Para comprobar si una política del ciclo de vida de Amazon ECR puede eliminar una imagen que utiliza una tarea en ejecución, consulte CloudTrail para ver la llamada a la API PolicyExecutionEvent.
Para asegurarse de que la etiqueta de la imagen de un contenedor no cambie, se recomienda activar la característica de inmutabilidad de la etiqueta.
Nota: La etiqueta de imagen del contenedor no se resuelve en los servicios que usan el controlador de despliegue CODE_DEPLOY o EXTERNAL.
Para actualizar el resumen de la imagen, complete los pasos de la sección Asegurarse de que el servicio utilice la imagen más reciente.
Desactivación de la coherencia de las versiones
Es posible que necesite usar una etiqueta de imagen de contenedor modificable, como LATEST, en lugar de una imagen coherente. Para establecer la configuración, actualice la definición de contenedor para que versionConsistency esté deshabilitado. De forma predeterminada, versionConsistency está configurado como habilitado. Cuando cambia el valor a deshabilitado, Amazon ECS deja de convertir la etiqueta de imagen de contenedor en un resumen. En su lugar, Amazon ECS usa el URI de la imagen original en la definición del contenedor para el despliegue.
Información relacionada
Anuncio de la coherencia de las versiones de software para los servicios de Amazon ECS