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 profile。
端到端测试
在受信任的网站上,您可以避免创建独立用户并为其使用 root 用户,因为您信任将在浏览器上运行的代码。
docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.51.0-noble /bin/bash
爬虫和抓取
在不受信任的网站上,建议使用独立用户启动浏览器并结合使用 seccomp profile。在容器内部或如果您使用此 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
seccomp_profile.json
运行启用沙箱的 Chromium 需要使用此文件。这是默认的 Docker seccomp profile,额外包含了用户命名空间克隆权限
{
"comment": "Allow create user namespaces",
"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 服务器,同时让您的测试在主机系统或另一台机器上运行。这对于在不支持的 Linux 发行版上运行测试或远程执行场景非常有用。
运行 Playwright 服务器
在 Docker 中启动 Playwright 服务器
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"
连接到服务器
- 同步
- 异步
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 库构建的。基于 musl 标准库的 Alpine Linux 和其他发行版不受支持。
构建您自己的镜像
要在 Docker 内部运行 Playwright,您需要安装 Python、Playwright 浏览器和浏览器系统依赖项。请参阅以下 Dockerfile
FROM python:3.12-bookworm
RUN pip install playwright==@1.51.0 && \
playwright install --with-deps