Docker
简介
Dockerfile.noble 可用于在 Docker 环境中运行 Playwright 脚本。此镜像包含 Playwright 浏览器 以及 浏览器系统依赖项。该镜像不包含 Playwright 包/依赖项,需单独安装。
用法
此 Docker 镜像发布在 Microsoft Artifact Registry 上。
此 Docker 镜像仅用于测试和开发目的。不建议使用此 Docker 镜像访问不可信的网站。
拉取镜像
docker pull mcr.microsoft.com/playwright/dotnet:v1.52.0-noble
运行镜像
默认情况下,Docker 镜像将使用 root
用户来运行浏览器。这将禁用 Chromium 沙箱,因为 root 用户无法使用该沙箱。如果运行的是可信代码(例如端到端测试),并且希望避免管理单独用户的麻烦,那么使用 root 用户可能没问题。对于网页抓取或爬取,我们建议在 Docker 容器内创建一个单独的用户,并使用 seccomp 配置文件。
端到端测试
在可信网站上,由于信任将在浏览器上运行的代码,因此可以避免创建单独的用户,直接使用 root 用户。
docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet: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/dotnet: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 时,推荐以下配置:
- 使用
--init
Docker 标志,以避免对 PID 为 1 的进程进行特殊处理。这是产生僵尸进程的常见原因。 - 使用 Chromium 时推荐使用
--ipc=host
。否则,Chromium 可能会耗尽内存并崩溃。在 Docker 文档中了解更多关于此选项的信息。 - 如果在启动 Chromium 时遇到奇怪的错误,在本地开发时,尝试使用
docker run --cap-add=SYS_ADMIN
运行你的容器。
在持续集成(CI)中使用
有关示例配置,请参阅我们的持续集成指南。
远程连接
你可以在 Docker 中运行 Playwright Server,同时让测试在主机系统或另一台机器上运行。这对于在不支持的 Linux 发行版上运行测试或远程执行场景很有用。
运行 Playwright Server
在 Docker 中启动 Playwright Server:
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"
连接到服务器
using Microsoft.Playwright;
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.ConnectAsync("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
指向主机的本地主机。在访问本地服务器时,你的测试应使用 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 库进行的。不支持 Alpine Linux 以及其他基于 musl 标准库的发行版。
使用不同的 .NET 版本
你可以使用 .NET 安装脚本 来安装不同的 SDK 版本:
curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --install-dir /usr/share/dotnet --channel 9.0