跳到主要內容

Docker

簡介

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

用法

此 Docker 映像發布至 Microsoft Artifact Registry

資訊

此 Docker 映像僅適用於測試和開發目的。不建議使用此 Docker 映像來瀏覽不受信任的網站。

拉取映像

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

執行映像

預設情況下,Docker 映像將使用 root 使用者來執行瀏覽器。這將停用 Chromium 沙箱,該沙箱在 root 使用者下不可用。如果您執行受信任的程式碼 (例如端對端測試) 並希望避免管理個別使用者的麻煩,則 root 使用者可能沒問題。對於網站抓取或爬取,我們建議在 Docker 容器內建立個別使用者,並使用 seccomp 設定檔。

端對端測試

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

docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet:v1.49.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/dotnet:v1.49.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 上使用

請參閱我們的 持續整合指南 以取得範例設定檔。

遠端連線

您可以在 Docker 中執行 Playwright 伺服器,同時讓您的測試在主機系統或其他機器上執行。這對於在不支援的 Linux 發行版本或遠端執行情境中執行測試非常有用。

執行 Playwright 伺服器

在 Docker 中啟動 Playwright 伺服器

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

連線至伺服器

using Microsoft.Playwright;

using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.ConnectAsync("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.49.0-noble /bin/sh -c "npx -y playwright@1.49.0 run-server --port 3000 --host 0.0.0.0"

這會使 hostmachine 指向主機的 localhost。您的測試應在存取本機伺服器時使用 hostmachine 而非 localhost

注意

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

映像標籤

請參閱所有可用的映像標籤

我們目前發布具有下列標籤的映像

  • :v1.49.0 - 基於 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.49.0 發行版本 Docker 映像。
  • :v1.49.0-noble - 基於 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.49.0 發行版本 Docker 映像。
  • :v1.49.0-jammy - 基於 Ubuntu 22.04 LTS (Jammy Jellyfish) 的 Playwright v1.49.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 標準程式庫的發行版本。

使用不同的 .NET 版本

您可以使用 .NET 安裝腳本 以安裝不同的 SDK 版本

curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --install-dir /usr/share/dotnet --channel 9.0