跳转到主要内容

Docker

简介

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

用法

此 Docker 镜像已发布到 Microsoft Artifact Registry

信息

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

拉取镜像

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

运行镜像

默认情况下,Docker 镜像将使用 root 用户来运行浏览器。这将禁用 Chromium 的沙箱,而沙箱在 root 用户下不可用。如果您运行受信任的代码(例如,端到端测试)并且想避免管理单独用户的麻烦,那么 root 用户可能就足够了。对于网页抓取或爬行,我们建议在 Docker 容器内创建一个单独的用户并使用 seccomp 配置文件。

端到端测试

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

docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.57.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.57.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": {}
}

在 Docker 中运行 Playwright 时,建议使用以下配置

  1. 建议使用 --init Docker 标志来避免对 PID=1 的进程进行特殊处理。这是僵尸进程的常见原因。
  2. 建议在使用 Chromium 时使用 --ipc=host。否则,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.57.0-noble /bin/sh -c "npx -y playwright@1.57.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/")

网络配置

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

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

这使得 hostmachine 指向主机的 localhost。当访问本地服务器时,您的测试应该使用 hostmachine 而不是 localhost

注意

在远程运行测试时,请确保测试中的 Playwright 版本与 Docker 容器中运行的版本匹配。

使用 noVNC 和 GitHub Codespaces 连接

对于 Docker 和 GitHub Codespaces 环境,您可以使用 Docker 镜像中内置的 noVNC 查看器来查看和生成测试。为了使 VNC Web 查看器在容器外部可访问,您可以在 .devcontainer/devcontainer.json 文件中启用 desktop-lite 功能并指定 webPort

{
"image": "mcr.microsoft.com/playwright:v1.57.0",
"forwardPorts": [6080],
"features": {
"desktop-lite": {
"webPort": "6080"
}
}
}

启用此功能后,您可以在新的浏览器标签页中打开指定的端口,即可访问 noVNC Web 查看器。这将使您能够直接在容器中录制测试、选择选择器并使用 codegen。

镜像标签

请参阅 所有可用的镜像标签

我们目前发布带有以下标签的镜像

  • :v1.57.0 - 基于 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.57.0 发布 Docker 镜像。
  • :v1.57.0-noble - 基于 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.57.0 发布 Docker 镜像。
  • :v1.57.0-jammy - 基于 Ubuntu 22.04 LTS (Jammy Jellyfish) 的 Playwright v1.57.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.57.0 && \
playwright install --with-deps