Docker(容器)
简介
Dockerfile.noble 可用于在 Docker 环境中运行 Playwright 脚本。该镜像包含了 Playwright 浏览器 和 浏览器系统依赖。Playwright 包/依赖本身未包含在镜像中,需要单独安装。
用法
该 Docker 镜像已发布到 Microsoft Artifact Registry。
此 Docker 镜像仅用于测试和开发目的。不建议使用此 Docker 镜像访问不受信任的网站。
拉取镜像
docker pull mcr.microsoft.com/playwright/python:v1.51.0-noble
运行镜像
默认情况下,Docker 镜像会使用 root
用户来运行浏览器。这会禁用 Chromium 的沙盒功能,因为 root 用户下无法使用沙盒。如果你运行的是受信任的代码(例如端到端测试),并且不想为管理单独用户而烦恼,那么使用 root 用户是可以的。对于网页爬取或抓取,我们建议在 Docker 容器内创建单独的用户,并使用 seccomp 配置文件。
端到端测试
在受信任的网站上,你可以不必创建单独的用户,直接使用 root 用户,因为你信任将在浏览器中运行的代码。
docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.51.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/python:v1.51.0-noble /bin/bash
运行 Chromium 并启用沙盒时需要 seccomp_profile.json
。这是一个 默认 Docker seccomp 配置文件,并额外允许用户命名空间克隆权限:
{
"comment": "Allow create user namespaces",
"names": [
"clone",
"setns",
"unshare"
],
"action": "SCMP_ACT_ALLOW",
"args": [],
"includes": {},
"excludes": {}
}
推荐的 Docker 配置
在 Docker 中运行 Playwright 时,推荐如下配置:
- 建议使用
--init
Docker 参数,以避免对 PID=1 进程的特殊处理。这是产生僵尸进程的常见原因。 - 建议使用
--ipc=host
,尤其是在使用 Chromium 时。如果不加此参数,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.51.0-noble /bin/sh -c "npx -y playwright@1.51.0 run-server --port 3000 --host 0.0.0.0"
连接到 Server
- 同步
- 异步
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect("ws://127.0.0.1:3000/")
from playwright.async_api import async_playwright
async with async_playwright() as p:
browser = await p.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.51.0-noble /bin/sh -c "npx -y playwright@1.51.0 run-server --port 3000 --host 0.0.0.0"
这样 hostmachine
就会指向主机的 localhost。在访问本地服务器时,你的测试应使用 hostmachine
替代 localhost
。
远程运行测试时,请确保你的测试中 Playwright 版本与 Docker 容器中运行的版本一致。
镜像标签
查看 [所有可用的镜像标签]。
我们目前发布了以下标签的镜像:
:v1.51.0
- 基于 Ubuntu 24.04 LTS(Noble Numbat)的 Playwright v1.51.0 版本 Docker 镜像。:v1.51.0-noble
- 基于 Ubuntu 24.04 LTS(Noble Numbat)的 Playwright v1.51.0 版本 Docker 镜像。:v1.51.0-jammy
- 基于 Ubuntu 22.04 LTS(Jammy Jellyfish)的 Playwright v1.51.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 标准库的发行版不受支持。
构建你自己的镜像
要在 Docker 内运行 Playwright,你需要安装 Python、Playwright 浏览器 和 浏览器系统依赖。参考以下 Dockerfile:
FROM python:3.12-bookworm
RUN pip install playwright==@1.51.0 && \
playwright install --with-deps