Docker
簡介
Dockerfile.noble 可用於在 Docker 環境中執行 Playwright 指令碼。此映像檔包含 Playwright 瀏覽器 和 瀏覽器系統相依性。Playwright 套件/相依性未包含在映像檔中,應另行安裝。
用法
此 Docker 映像檔已發佈至 Microsoft Artifact Registry。
此 Docker 映像檔僅適用於測試和開發目的。不建議使用此 Docker 映像檔來瀏覽不受信任的網站。
提取映像檔
docker pull mcr.microsoft.com/playwright/python:v1.49.1-noble
執行映像檔
預設情況下,Docker 映像檔將使用 root
使用者執行瀏覽器。這將停用 Chromium 沙箱,該沙箱不適用於 root。如果您執行受信任的程式碼 (例如端對端測試) 並希望避免管理個別使用者的麻煩,則 root 使用者可能沒問題。對於網頁抓取或爬取,我們建議在 Docker 容器內建立個別使用者並使用 seccomp 設定檔。
端對端測試
在受信任的網站上,您可以避免建立個別使用者並為其使用 root,因為您信任將在瀏覽器上執行的程式碼。
docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.49.1-noble /bin/bash
爬取和抓取
在不受信任的網站上,建議使用個別使用者來啟動瀏覽器,並結合 seccomp 設定檔。在容器內部或如果您將 Docker 映像檔用作基礎映像檔,則必須使用 adduser
來執行此操作。
docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/python:v1.49.1-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.1-noble /bin/sh -c "npx -y playwright@1.49.1 run-server --port 3000 --host 0.0.0.0"
連線至伺服器
- 同步
- 非同步
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect("ws://127.0.0.1:3000/")
from playwright.async_api import async_playwright
async with async_playwright() as p:
browser = await p.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.49.1-noble /bin/sh -c "npx -y playwright@1.49.1 run-server --port 3000 --host 0.0.0.0"
這會使 hostmachine
指向主機的 localhost。您的測試應使用 hostmachine
而非 localhost
來存取本機伺服器。
遠端執行測試時,請確保測試中的 Playwright 版本與 Docker 容器中執行的版本相符。
映像檔標籤
請參閱所有可用的映像檔標籤。
我們目前發佈具有以下標籤的映像檔
:v1.49.1
- 基於 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.49.1 發行版本 Docker 映像檔。:v1.49.1-noble
- 基於 Ubuntu 24.04 LTS (Noble Numbat) 的 Playwright v1.49.1 發行版本 Docker 映像檔。:v1.49.1-jammy
- 基於 Ubuntu 22.04 LTS (Jammy Jellyfish) 的 Playwright v1.49.1 發行版本 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 標準程式庫的發行版不受支援。
建置您自己的映像檔
若要在 Docker 內部執行 Playwright,您需要安裝 Python、Playwright 瀏覽器 和 瀏覽器系統相依性。請參閱以下 Dockerfile
FROM python:3.12-bookworm
RUN pip install playwright==@1.49.1 && \
playwright install --with-deps