Docker
簡介
Dockerfile.jammy 可以用於在 Docker 環境中執行 Playwright 程式碼。此映像包含 Playwright 瀏覽器 和 瀏覽器系統相依性。Playwright 套件/相依套件不包含在映像中,應該單獨安裝。
使用方式
此 Docker 映像檔已發佈至 Microsoft Artifact Registry。
此 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": {}
}
建議在使用 Chrome 時使用 --ipc=host
(Docker 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 映像。
建議盡可能將 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