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

Docker环境下使用TestCafe启动Chrome浏览器失败,报WebSocket连接关闭错误求助

Docker环境下使用TestCafe启动Chrome浏览器失败,报WebSocket连接关闭错误求助

大家好,我最近在折腾Docker+TestCafe+Google Chrome的UI自动化测试,卡了好几天没解决,来求助一下!

问题核心现象

我在Docker容器里运行TestCafe测试时,指定用Google Chrome浏览器总是启动失败,抛出WebSocket连接关闭的错误日志,具体内容如下:

Error: WebSocket connection closed
    at /app/node_modules/chrome-remote-interface/lib/chrome.js:94:35
    at Chrome._handleConnectionClose (/app/node_modules/chrome-remote-interface/lib/chrome.js:256:13)
    at WebSocket.<anonymous> (/app/node_modules/chrome-remote-interface/lib/chrome.js:243:22)
    at WebSocket.emit (node:events:518:28)
    at WebSocket.emit (node:domain:489:12)
    at WebSocket.emitClose (/app/node_modules/ws/lib/websocket.js:246:10)
    at Receiver.receiverOnFinish (/app/node_modules/ws/lib/websocket.js:1060:20)
    at Receiver.emit (node:events:518:28)
    at Receiver.emit (node:domain:489:12)
    at finish (node:internal/streams/writable:955:10)

我推测问题根源是Chrome在Docker容器里没能正常启动——虽然单独进入容器执行chrome --version能看到是最新版Chrome,而且之前用Chromium 1.20的时候能正常启动浏览器,但截图功能有问题,所以想换成Google Chrome试试,结果就卡在这里了。

我的环境与配置

  • 本地机器:Mac
  • 容器基础镜像:node:22-bullseye(指定linux/amd64平台适配)
  • 测试框架:TestCafe
  • 容器构建与启动脚本:run-snapshot.sh,挂载本地项目目录到容器内运行测试

Dockerfile 内容

FROM --platform=linux/amd64 node:22-bullseye

# Suppress interactive prompts and D-Bus probing
ENV DEBIAN_FRONTEND=noninteractive
ENV DBUS_SESSION_BUS_ADDRESS=/dev/null

# Install Google Chrome and dependencies
RUN apt-get update && apt-get install -y \
wget \
curl \
gnupg \
ca-certificates \
fonts-liberation \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libcups2 \
libdbus-1-3 \
libdrm2 \
libgbm1 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libx11-xcb1 \
libxcomposite1 \
libxdamage1 \
libxrandr2 \
libxss1 \
libxext6 \
libxfixes3 \
libxrender1 \
libxi6 \
libxtst6 \
xdg-utils \
awscli \
--no-install-recommends && \
wget -qO - 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-chrome.list && \
apt-get update && \
apt-get install -y google-chrome-stable --no-install-recommends

# Symlinks so TestCafe can find 'chrome'
RUN ln -sf /usr/bin/google-chrome /usr/bin/chrome && \
ln -sf /usr/bin/google-chrome /usr/bin/chromium

# Verify Chrome installation
RUN google-chrome --version

# Project setup
WORKDIR /app
COPY . .
RUN yarn config set strict-ssl false
RUN yarn install

# Default command to run your visual tests
CMD ["yarn", "run", "ci:visual"]

启动脚本 run-snapshot.sh 内容

#!/bin/bash

# Load environment variables from .env file
set -a
source .env
set +a

# Default values
SNAPSHOT=${SNAPSHOT:-actual}
TESTS=${TESTS:-tests/visual/*.test.ts}

# Run the Docker container with all env vars
docker run -it --rm \
-v "$(pwd)":/app \
-w /app \
-e ENV="$ENV" \
-e TESTS="$TESTS" \
visual-test-runner

已经排查过的点

  • 容器内Chrome安装完全正常:通过docker run -it --rm -v "$(pwd)":/app -w /app visual-test-runner bash进入容器,执行chrome --version能正常返回最新版本号
  • 本地直接运行yarn run ci:visual毫无问题:Chrome无头模式能正常启动,测试执行、截图功能都正常
  • 之前用Chromium 1.20在容器内可以启动浏览器,但截图功能不符合需求,所以才换成Google Chrome

求助需求

有没有大佬遇到过类似的问题?怎么才能让TestCafe在Docker容器里正常启动Google Chrome并顺利执行测试呢?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:34:32