如何在Docker的Node.js环境中安装Chrome、ChromeDriver、JRE以运行Selenium应用
Docker 镜像适配 Selenium + Chrome 运行环境方案
容器是完全隔离的运行环境,宿主机预装的依赖无法直接被容器内部访问,必须在镜像构建阶段就安装好所有需要的系统依赖。
修改后的 Dockerfile 配置
FROM node:14 # 安装系统依赖:Chrome、ChromeDriver、JRE RUN apt update && apt install -y wget gnupg2 default-jre \ # 添加 Chrome 官方源 && wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \ && apt update && apt install -y google-chrome-stable \ # 安装和当前Chrome版本匹配的ChromeDriver && CHROME_VERSION=$(google-chrome --version | grep -oP "(?<=Google Chrome )\d+\.\d+\.\d+") \ && DRIVER_VERSION=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_VERSION) \ && wget -q https://chromedriver.storage.googleapis.com/$DRIVER_VERSION/chromedriver_linux64.zip \ && unzip chromedriver_linux64.zip -d /usr/local/bin/ \ && chmod +x /usr/local/bin/chromedriver \ # 清理缓存减小镜像体积 && rm -rf /var/lib/apt/lists/* chromedriver_linux64.zip # 创建应用目录 WORKDIR /usr/src/app # 安装Node依赖 COPY package*.json ./ RUN npm install # 生产环境可替换为 npm ci --only=production COPY . . EXPOSE 3010 CMD [ "npm", "start" ]
额外必做配置
注意:容器内没有图形界面和默认沙箱权限,你需要在Node代码里初始化Selenium Chrome实例时添加以下启动参数,否则仍会启动失败
const { Builder } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); let options = new chrome.Options(); options.addArguments('--headless=new'); // 无头模式 options.addArguments('--no-sandbox'); // 关闭沙箱,容器环境必须配置 options.addArguments('--disable-dev-shm-usage'); // 解决/dev/shm分区不足问题 options.addArguments('--disable-gpu'); // 禁用GPU加速 let driver = await new Builder() .forBrowser('chrome') .setChromeOptions(options) .build();
注意事项
- 若你使用的是4.x及以上版本的selenium-webdriver npm包,无需依赖JRE,可以删除Dockerfile中安装
default-jre的步骤减小镜像体积 - 构建镜像时如果遇到源访问缓慢的问题,可以替换为国内的Debian源和Chrome镜像源
- 每次构建都会自动安装和当前最新稳定版Chrome匹配的ChromeDriver,不会出现版本不兼容问题
内容的提问来源于stack exchange,提问作者TheUnreal
相关产品推荐
相关产品推荐

