Skip to main content

Docker

簡介

Dockerfile.jammy 可以用於在 Docker 環境中執行 Playwright 程式碼。此映像包含 Playwright 瀏覽器瀏覽器系統相依性。Playwright 套件/相依套件不包含在映像中,應該單獨安裝。

使用方式

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

info

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

拉取映像檔

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

執行該映像檔

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

端到端測試

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

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

建議在使用 Chrome 時使用 --ipc=hostDocker docs)。沒有這個標誌,Chrome 可能會耗盡記憶體。

在 CI 上使用

請參閱我們的 持續整合指南 以獲取範例配置。

圖片標籤

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

我們目前發佈帶有以下標籤的圖片:

  • :v1.46.0 - Playwright v1.46.0 發佈基於 Ubuntu 24.04 LTS (Noble Numbat) 的 docker 映像。
  • :v1.46.0-noble - Playwright v1.46.0 發佈基於 Ubuntu 24.04 LTS (Noble Numbat) 的 docker 映像。
  • :v1.46.0-jammy - Playwright v1.46.0 發佈基於 Ubuntu 22.04 LTS (Jammy Jellyfish) 的 docker 映像。
  • :v1.46.0-focal - Playwright v1.46.0 發佈基於 Ubuntu 20.04 LTS (Focal Fossa) 的 docker 映像。
note

建議盡可能將 Docker 映像檔固定到特定版本。如果 Docker 映像檔中的 Playwright 版本與專案/測試中的版本不匹配,Playwright 將無法找到瀏覽器可執行檔。

基礎映像檔

我們目前根據以下 Ubuntu 版本發佈映像:

  • Ubuntu 24.04 LTS (Noble Numbat), image tags include noble
  • Ubuntu 22.04 LTS (Jammy Jellyfish), image tags include jammy
  • Ubuntu 20.04 LTS (Focal Fossa), image tags include focal

Alpine

Firefox 和 WebKit 的瀏覽器建構是為 glibc 函式庫建構的。不支援基於 musl 標準函式庫的 Alpine Linux 和其他發行版。

使用不同的 .NET 版本

您可以使用 .NET install script 來安裝不同的 SDK 版本:

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