ECS上运行Selenium失败求助:Docker部署相关问题
解决方案
1. 补充Chrome运行依赖
Docker环境下运行Chrome需要额外系统库支持,在安装Chrome的步骤后添加依赖安装:
RUN apt-get update && apt-get -y install google-chrome-stable \ && apt-get install -y libnss3 libgconf-2-4 libxss1 libasound2 libatk-bridge2.0-0 libgtk-3-0 \ && rm -rf /var/lib/apt/lists/*
2. 强制Chrome与Chromedriver版本匹配
替换原有的chromedriver安装命令,通过Chrome版本精准匹配对应驱动:
RUN CHROME_VERSION=$(google-chrome-stable --version | grep -oP '\d+\.\d+\.\d+\.\d+') \ && npm install chromedriver@$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION%.*}) --chromedriver-force-download
3. 配置Selenium无头无沙箱运行模式
在你的Selenium初始化代码中添加以下Chrome配置:
const { Builder } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); const options = new chrome.Options(); options.addArguments('--headless=new'); // 启用新版无头模式 options.addArguments('--no-sandbox'); // 禁用沙箱(ECS环境必填) options.addArguments('--disable-dev-shm-usage'); // 避免临时空间不足 options.addArguments('--disable-gpu'); // 禁用GPU加速 options.addArguments('--window-size=1920,1080'); // 固定窗口尺寸 const driver = new Builder() .forBrowser('chrome') .setChromeOptions(options) .build();
4. 优化Dockerfile构建逻辑
- 替换
COPY $PWD /crm-connector为COPY . /crm-connector,避免路径歧义 - 合并RUN命令减少镜像层数,同时清理缓存缩小镜像体积:
FROM --platform=linux/amd64 node:16 RUN apt update && apt -y install build-essential wget \ && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \ && apt-get update && apt-get -y install google-chrome-stable libnss3 libgconf-2-4 libxss1 libasound2 libatk-bridge2.0-0 libgtk-3-0 \ && rm -rf /var/lib/apt/lists/* WORKDIR /crm-connector COPY package*.json ./ RUN node -v \ && npm uninstall chromedriver \ && npm install \ && CHROME_VERSION=$(google-chrome-stable --version | grep -oP '\d+\.\d+\.\d+\.\d+') \ && npm install chromedriver@$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION%.*}) --chromedriver-force-download COPY . . RUN npm run build EXPOSE 8081 CMD [ "npm", "start" ]
5. 修正ECS任务定义的架构指定
在runtimePlatform中明确指定CPU架构,确保任务调度到X86_64实例:
"runtimePlatform": { "operatingSystemFamily": "LINUX", "cpuArchitecture": "X86_64" }
内容的提问来源于stack exchange,提问作者Vivek Aasaithambi
相关产品推荐
相关产品推荐

