使用Selenium独立镜像的ECS任务在失败回滚前一直处于Pending状态
针对你在AWS Fargate上部署Selenium节点遇到的问题,结合操作记录和任务定义,以下是具体排查与修复步骤:
1. 修正shm-size配置方式
你将shm-size放在environment变量中是错误的——shm-size属于Docker容器运行参数,需通过linuxParameters配置,而非容器内环境变量。修改后的容器定义片段如下:
{ "name": "selenium-node", "image": "你的镜像地址", "cpu": 0, "portMappings": [ // 保留原端口映射配置 ], "essential": true, "environment": [], // 移除shm-size相关环境变量 "linuxParameters": { "sharedMemorySize": 2048 // 对应2GB共享内存 }, // 其余配置保持不变 }
Selenium镜像运行浏览器需要足够共享内存,错误配置会直接导致容器启动失败。
2. 修复CloudWatch日志组配置
你的日志组配置awslogs-group: "/ecs/"格式不合法,日志组名称不能以斜杠结尾,需设置具体标识。修改为:
"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/selenium-node-task", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }
错误的日志组名称会导致无法创建日志组,进而无法获取容器启动失败的关键日志信息。
3. 镜像拉取与适配检查
(1)镜像架构匹配
任务定义指定了X86_64架构,需确保使用的Selenium镜像(Docker Hub或自建ECR镜像)为X86_64架构。建议避免使用latest标签,指定具体版本(如selenium/node-chrome:4.15.0-20231013),防止架构不兼容。
(2)ECR镜像权限验证
若使用自建ECR仓库,确认任务执行角色已附加以下权限(可通过托管策略AmazonECSTaskExecutionRolePolicy快速配置):
ecr:GetDownloadUrlForLayerecr:BatchGetImageecr:BatchCheckLayerAvailability
同时确保镜像已正确推送到ECR仓库,且仓库访问策略允许任务所在AWS账号拉取镜像。
4. 任务资源配置验证
Selenium节点运行浏览器需要足够资源,当前cpu:1024(1核)、memory:2048(2GB)为基础配置,若运行带可视化的节点(如Chrome),可临时将内存提升至4096(4GB),排除资源不足导致的启动失败。
完成以上修改后重新部署任务,此时可正常获取CloudWatch日志,根据日志进一步定位剩余问题(若存在)。
内容的提问来源于stack exchange,提问作者Nate1zn

