Skip to main content

Docker

簡介

Dockerfile.noble 可用於在 Docker 環境中執行 Playwright 腳本。此映像檔包含 Playwright 瀏覽器瀏覽器系統相依性。Playwright 套件/相依性並未包含在映像檔中,需要另外安裝。

使用方式

此 Docker 映像檔已發布至 Microsoft Artifact Registry

info

此 Docker 映像檔僅供測試與開發用途使用。不建議使用此 Docker 映像檔造訪不受信任的網站。

拉取映像檔

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

執行映像檔

預設情況下,Docker 映像檔會使用 root 使用者執行瀏覽器。這會停用 Chromium 沙盒,因為 root 無法使用沙盒。如果您執行受信任的程式碼(例如端對端測試)並想要避免管理不同使用者的麻煩,那麼 root 使用者可能沒問題。對於網頁爬取或抓取,我們建議在 Docker 容器內建立獨立的使用者並使用 seccomp 設定檔。

端對端測試

在受信任的網站上,您可以避免建立獨立使用者並使用 root,因為您信任將在瀏覽器上執行的程式碼。

docker run -it --rm --ipc=host mcr.microsoft.com/playwright:v1.55.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:v1.55.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 配置

在 Docker 中執行 Playwright 時,建議以下配置:

  1. 使用 --init Docker 旗標建議避免對 PID=1 的行程進行特殊處理。這是僵屍行程的常見原因。
  2. 使用 --ipc=host 在使用 Chromium 時建議使用。沒有此選項,Chromium 可能會耗盡記憶體並當機。在 Docker 文件中了解更多關於此選項的資訊。
  3. 如果在啟動 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.55.0-noble /bin/sh -c "npx -y playwright@1.55.0 run-server --port 3000 --host 0.0.0.0"

連線到 Server

有兩種方式連線到遠端 Playwright server:

  1. 使用環境變數搭配 @playwright/test
PW_TEST_CONNECT_WS_ENDPOINT=ws://127.0.0.1:3000/ npx playwright test
  1. 針對其他應用程式使用 browserType.connect() API:
const browser = await 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.55.0-noble /bin/sh -c "npx -y playwright@1.55.0 run-server --port 3000 --host 0.0.0.0"

這使 hostmachine 指向主機的 localhost。當存取本機伺服器時,您的測試應該使用 hostmachine 而不是 localhost

note

當遠端執行測試時,請確保您測試中的 Playwright 版本與 Docker 容器中執行的版本相符。

映像檔標籤

請參閱[所有可用的映像檔標籤]。

我們目前發布具有以下標籤的映像檔:

  • :v1.55.0 - 基於 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.55.0 發行版 docker 映像檔。
  • :v1.55.0-noble - 基於 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.55.0 發行版 docker 映像檔。
  • :v1.55.0-jammy - 基於 Ubuntu 22.04 LTS (Jammy Jellyfish) 的 Playwright v1.55.0 發行版 docker 映像檔。
note

建議盡可能總是將您的 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,您需要安裝 Node.js、Playwright 瀏覽器瀏覽器系統相依性。請參閱以下 Dockerfile:

FROM node:20-bookworm

RUN npx -y playwright@1.55.0 install --with-deps