Docker
介绍
Dockerfile.jammy 可用于在 Docker 环境中运行 Playwright 脚本。此镜像包含 Playwright 浏览器 和 浏览器系统依赖项。Playwright 包/依赖项未包含在镜像中,应单独安装。
用法
此 Docker 镜像发布到 Microsoft Artifact Registry。
此 Docker 镜像仅用于测试和开发目的。不建议使用此 Docker 镜像访问不可信网站。
拉取镜像
docker pull mcr.microsoft.com/playwright/dotnet:v1.47.0-noble
运行镜像
默认情况下,Docker 镜像将使用 root
用户来运行浏览器。这将禁用 Chromium 沙箱,该沙箱在 root 用户下不可用。如果您运行的是可信代码(例如端到端测试)并且想要避免管理单独用户的麻烦,那么 root 用户可能可以使用。对于网络抓取或爬取,我们建议在 Docker 容器内创建单独用户并使用 seccomp 配置文件。
端到端测试
在可信网站上,您可以避免创建单独用户并使用 root 用户,因为您信任将在浏览器上运行的代码。
docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet:v1.47.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.47.0-noble /bin/bash
seccomp_profile.json
是运行带有沙箱的 Chromium 所需的。这是一个具有额外用户命名空间克隆权限的 默认 Docker seccomp 配置文件
{
"comment": "Allow create user namespaces",
"names": [
"clone",
"setns",
"unshare"
],
"action": "SCMP_ACT_ALLOW",
"args": [],
"includes": {},
"excludes": {}
}
使用 --ipc=host
建议使用 Chrome(Docker 文档)。Chrome 在没有此标志的情况下可能会耗尽内存。
在 CI 上使用
查看我们的 持续集成指南 以获取示例配置。
镜像标签
查看 所有可用的镜像标签。
我们目前发布了以下标签的镜像
:v1.47.0
- 基于 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.47.0 版本 Docker 镜像。:v1.47.0-noble
- 基于 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.47.0 版本 Docker 镜像。:v1.47.0-jammy
- 基于 Ubuntu 22.04 LTS (Jammy Jellyfish) 的 Playwright v1.47.0 版本 Docker 镜像。:v1.47.0-focal
- 基于 Ubuntu 20.04 LTS (Focal Fossa) 的 Playwright v1.47.0 版本 Docker 镜像。
建议您始终将 Docker 镜像固定到特定版本(如果可能)。如果 Docker 镜像中的 Playwright 版本与项目/测试中的版本不匹配,Playwright 将无法找到浏览器可执行文件。
基础镜像
我们目前发布了基于以下 Ubuntu 版本的镜像
- **Ubuntu 24.04 LTS** (Noble Numbat),镜像标签包括
noble
- **Ubuntu 22.04 LTS** (Jammy Jellyfish),镜像标签包括
jammy
- **Ubuntu 20.04 LTS** (Focal Fossa),镜像标签包括
focal
Alpine
Firefox 和 WebKit 的浏览器构建是为 glibc 库构建的。基于 musl 标准库的 Alpine Linux 和其他发行版不受支持。
使用不同的 .NET 版本
您可以使用 .NET 安装脚本 来安装不同的 SDK 版本
curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --install-dir /usr/share/dotnet --channel 6.0