Docker
简介
Dockerfile.noble 可用于在Docker环境中运行Playwright脚本。该镜像包含Playwright浏览器和浏览器系统依赖项。Playwright包/依赖项不包含在镜像中,需要单独安装。
使用方法
此Docker镜像发布至Microsoft Artifact Registry。
此Docker镜像仅用于测试和开发目的。不建议使用此Docker镜像访问不受信任的网站。
拉取镜像
docker pull mcr.microsoft.com/playwright/java:v1.50.0-noble
运行镜像
默认情况下,Docker镜像会使用root
用户来运行浏览器。这将禁用Chromium沙箱功能,因为沙箱在root用户下不可用。如果您运行的是可信代码(例如端到端测试)并且希望避免管理单独用户的麻烦,那么使用root用户可能没问题。对于网页抓取或爬虫场景,我们建议在Docker容器内创建单独用户并使用seccomp配置文件。
端到端测试
在受信任的网站上,您可以避免创建单独的用户并使用root账户,因为您信任将在浏览器中运行的代码。
docker run -it --rm --ipc=host mcr.microsoft.com/playwright/java:v1.50.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/java:v1.50.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": {}
}
使用Chrome时建议使用--ipc=host
(Docker文档)。若不添加此标志,Chrome可能会耗尽内存。
在CI上使用Playwright
查看我们的持续集成指南获取示例配置。
远程连接
您可以在Docker中运行Playwright Server,同时让测试在主机系统或另一台机器上运行。这对于在不支持的Linux发行版或远程执行场景下运行测试非常有用。
运行Playwright服务器
在Docker中启动Playwright服务器:
docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.50.0-noble /bin/sh -c "npx -y playwright@1.50.0 run-server --port 3000 --host 0.0.0.0"
连接到服务器
package org.example;
import com.microsoft.playwright.*;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.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.50.0-noble /bin/sh -c "npx -y playwright@1.50.0 run-server --port 3000 --host 0.0.0.0"
这使hostmachine
指向主机的本地主机。您的测试在访问本地服务器时应使用hostmachine
而不是localhost
。
在远程运行测试时,请确保测试中的Playwright版本与Docker容器中运行的版本一致。
图片标签
查看 所有可用的镜像标签。
我们目前发布带有以下标签的镜像:
:v1.50.0
- 基于Ubuntu 24.04 LTS (Noble Numbat)的Playwright v1.50.0版本Docker镜像。:v1.50.0-noble
- 基于Ubuntu 24.04 LTS(Noble Numbat)的Playwright v1.50.0版本Docker镜像。:v1.50.0-jammy
- 基于Ubuntu 22.04 LTS(Jammy Jellyfish)的Playwright v1.50.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及其他发行版不受支持。