跳到主要内容

Docker 环境

简介

Dockerfile.noble 可用于在 Docker 环境中运行 Playwright 脚本。该镜像包含 Playwright 浏览器浏览器系统依赖。Playwright 包/依赖不包含在镜像中,需要单独安装。

使用方式

该 Docker 镜像已发布至 Microsoft Artifact Registry

信息

此 Docker 镜像仅适用于测试和开发目的。不建议使用该镜像访问不受信任的网站。

拉取镜像

docker pull mcr.microsoft.com/playwright:v1.52.0-noble

运行镜像

默认情况下,Docker 镜像会使用 root 用户运行浏览器。这将禁用 Chromium 沙箱(沙箱在 root 用户下不可用)。如果您运行的是可信代码(例如端到端测试)且希望避免管理单独用户的麻烦,那么使用 root 用户可能没有问题。对于网页抓取或爬虫场景,我们建议在 Docker 容器内创建单独用户并使用 seccomp 配置文件。

端到端测试

在可信网站上,您可以避免创建单独用户而直接使用 root,因为您信任将在浏览器中运行的代码。

docker run -it --rm --ipc=host mcr.microsoft.com/playwright:v1.52.0-noble /bin/bash

爬取与数据抓取

在不受信任的网站上运行时,建议使用单独的用户账户启动浏览器,并结合 seccomp 配置文件。在容器内部或使用 Docker 镜像作为基础镜像时,需要使用 adduser 命令创建用户。

docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright:v1.52.0-noble /bin/bash

运行带沙箱的 Chromium 需要 seccomp_profile.json 文件。这是在 Docker 默认 seccomp 配置文件 基础上增加了用户命名空间克隆权限的配置:

{
"comment": "允许创建用户命名空间",
"names": [
"clone",
"setns",
"unshare"
],
"action": "SCMP_ACT_ALLOW",
"args": [],
"includes": {},
"excludes": {}
}

推荐的 Docker 配置

在 Docker 中运行 Playwright 时,推荐以下配置:

  1. 使用 --init Docker 标志可以避免对 PID=1 进程的特殊处理,这是产生僵尸进程的常见原因。
  2. 使用 --ipc=host 参数运行 Chromium 时推荐启用,否则 Chromium 可能会因内存不足而崩溃。更多信息请参阅 Docker 文档
  3. 如果启动 Chromium 时遇到奇怪错误,在本地开发时可以尝试使用 docker run --cap-add=SYS_ADMIN 运行容器。

在 CI 上使用

参考我们的 持续集成指南 查看示例配置。

远程连接

您可以在 Docker 中运行 Playwright 服务器,同时让测试在主机系统或其他机器上运行。这对于在不支持的 Linux 发行版上运行测试或远程执行场景非常有用。

运行 Playwright 服务器

在 Docker 中启动 Playwright 服务器:

docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.52.0-noble /bin/sh -c "npx -y playwright@1.52.0 run-server --port 3000 --host 0.0.0.0"

连接到服务器

有两种方式可以连接到远程 Playwright 服务器:

  1. 使用 @playwright/test 的环境变量方式:
PW_TEST_CONNECT_WS_ENDPOINT=ws://127.0.0.1:3000/ npx playwright test
  1. 在其他应用中使用 browserType.connect() API:
const browser = await playwright['chromium'].connect('ws://127.0.0.1:3000/');

网络配置

如果需要从 Docker 容器内访问本地服务器:

docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.52.0-noble /bin/sh -c "npx -y playwright@1.52.0 run-server --port 3000 --host 0.0.0.0"

这将使 hostmachine 指向主机的 localhost。您的测试在访问本地服务器时应使用 hostmachine 而非 localhost

:::注意 在远程运行测试时,请确保测试中的 Playwright 版本与 Docker 容器中运行的版本一致。 :::

镜像标签

查看 [所有可用的镜像标签]。

我们当前发布的镜像包含以下标签:

  • :v1.52.0 - 基于 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.52.0 发布版 Docker 镜像
  • :v1.52.0-noble - 基于 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.52.0 发布版 Docker 镜像
  • :v1.52.0-jammy - 基于 Ubuntu 22.04 LTS (Jammy Jellyfish) 的 Playwright v1.52.0 发布版 Docker 镜像

:::注意 建议尽可能将 Docker 镜像固定到特定版本。如果 Docker 镜像中的 Playwright 版本与项目/测试中的版本不匹配,Playwright 将无法定位浏览器可执行文件。 :::

基础镜像

我们当前发布的镜像基于以下 Ubuntu 版本:

  • Ubuntu 24.04 LTS (Noble Numbat),镜像标签包含 noble
  • Ubuntu 22.04 LTS (Jammy Jellyfish),镜像标签包含 jammy

Alpine

Firefox 和 WebKit 的浏览器构建是针对 glibc 库构建的。不支持基于 musl 标准库的 Alpine Linux 和其他发行版。

构建自定义镜像

要在 Docker 中运行 Playwright,需要安装 Node.js、Playwright 浏览器浏览器系统依赖。参考以下 Dockerfile:

FROM node:20-bookworm

RUN npx -y playwright@1.52.0 install --with-deps