You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

搭载M2芯片的Mac上Docker容器中Chrome启动失败的E2E测试问题

在M2芯片Mac的Docker容器中运行E2E测试时Chrome崩溃的问题

错误信息

* (MatchError) no match of right hand side value: {:error, "unknown error: Chrome failed to start: crashed.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=114.0.5735.90,platform=Linux 6.4.16-linuxkit x86_64)"}

Dockerfile.localdev相关内容

# Node.js, npm, and yarn installation
RUN curl -fsSL https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz | tar -xJv -C /usr/local --strip-components=1 --no-same-owner && \
    ln -s /usr/local/bin/node /usr/local/bin/nodejs && \
    npm install -g npm@${NPM_VERSION} && \
    npm install -g yarn@${YARN_VERSION}
    

# Chrome headless for running browser tests
RUN yum -y install liberation-* && \
    yum -y install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm && \
    LATEST_CHROMEDRIVER_VERSION="$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE)" && \
    wget https://chromedriver.storage.googleapis.com/$LATEST_CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip -d /usr/local/bin && \
    rm chromedriver_linux64.zip

环境信息

  • 宿主机:搭载M2芯片的Mac
  • Docker容器系统:Amazon Linux 2
  • Node版本:16.17.0
  • Chrome版本:最新稳定版
  • ChromeDriver版本:114.0.5735.90

已尝试操作

  • 更换Chrome和ChromeDriver版本,问题未解决
  • 测试在GitLab CI/CD流水线可正常运行,但本地持续失败

解决方案

1. 处理ARM架构兼容问题

M2为ARM64架构,当前安装的是x86_64版本Chrome,Docker在ARM Mac上运行x86容器需依赖Rosetta模拟,易出现稳定性问题,可二选一调整:

  • 打开Docker Desktop设置,进入「Features in development」勾选Use Rosetta for x86/amd64 emulation on Apple Silicon
  • 改用ARM版本Chrome,替换Dockerfile中Chrome安装逻辑:
    RUN yum -y install liberation-* && \
        curl -LO https://dl.google.com/linux/direct/google-chrome-stable_current_aarch64.rpm && \
        yum -y install ./google-chrome-stable_current_aarch64.rpm && \
        rm google-chrome-stable_current_aarch64.rpm
    
    同步替换ChromeDriver下载链接为ARM版本:
    wget https://chromedriver.storage.googleapis.com/$LATEST_CHROMEDRIVER_VERSION/chromedriver_linux_arm64.zip
    

2. 添加Chrome无头模式必备启动参数

在E2E测试的浏览器配置中添加以下参数(以Playwright为例,其他框架逻辑一致):

const browser = await chromium.launch({
  headless: true,
  args: [
    '--no-sandbox',
    '--disable-dev-shm-usage',
    '--disable-gpu',
    '--remote-debugging-port=9222',
    '--headless=new'
  ]
});

参数作用:

  • --no-sandbox:容器环境下Chrome无法启用沙箱,必须关闭
  • --disable-dev-shm-usage:避免容器共享内存不足导致崩溃
  • --remote-debugging-port:强制指定调试端口,解决DevToolsActivePort文件缺失问题

3. 调整容器运行权限

避免以root用户运行Chrome,可在Dockerfile中创建普通用户:

RUN useradd -m testuser
USER testuser

或运行容器时指定用户:

docker run --user 1000:1000 [你的镜像名]

4. 确保ChromeDriver与Chrome版本严格匹配

不要盲目拉取最新Driver,改为获取当前安装Chrome对应的版本:

# 替换原ChromeDriver安装代码
RUN CHROME_VERSION=$(google-chrome --version | grep -oP '\d+\.\d+\.\d+\.\d+') && \
    CHROMEDRIVER_VERSION=$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION%.*}) && \
    wget https://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip -d /usr/local/bin && \
    rm chromedriver_linux64.zip

内容的提问来源于stack exchange,提问作者klixo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:34:57