Docker
Официальные Docker-образы Playwright, запуск контейнеров, кастомные сборки, Playwright Server и подключение к удалённым браузерам.
Официальный Docker-образ
Microsoft публикует официальные Docker-образы Playwright в реестре mcr.microsoft.com/playwright. Образы включают все браузеры, их системные зависимости и Python.
# Pull образа с Python docker pull mcr.microsoft.com/playwright/python:v1.61.0-noble # Просмотр тегов docker pull mcr.microsoft.com/playwright/python:latest # Запуск интерактивной сессии docker run -it --rm --ipc=host \ mcr.microsoft.com/playwright/python:v1.61.0-noble /bin/bash
Базовые образы: Playwright использует Ubuntu Noble (24.04). Образы доступны для Node.js (playwright), Python (playwright/python) и Java (playwright/java).
Запуск контейнера: ключевые флаги
--ipc=host— отключает изоляцию IPC. Предотвращает нехватку памяти (OOM) в Chromium при множестве открытых страниц.--init— запускает init-процесс (tini) для корректной обработки zombie-процессов.--user pwuser— запуск от непривилегированного пользователя (безопасность).--security-opt seccomp=seccomp_profile.json— кастомный seccomp-профиль для доступа к untrusted-сайтам.
# Запуск с --ipc=host и --init docker run -it --rm --ipc=host --init \ mcr.microsoft.com/playwright/python:v1.61.0-noble /bin/bash # Запуск от пользователя pwuser docker run -it --rm --ipc=host --user pwuser \ mcr.microsoft.com/playwright/python:v1.61.0-noble pytest tests/
Playwright Server (удалённые браузеры)
Playwright может запускаться в режиме сервера, предоставляя доступ к браузерам по WebSocket. Это позволяет отделить тесты от браузеров.
# Запуск сервера на порту 5555 npx playwright run-server --port 5555 # Docker: запуск сервера в контейнере docker run -d --rm --ipc=host --name pw-server -p 5555:5555 \ mcr.microsoft.com/playwright/python:v1.61.0-noble \ npx playwright run-server --port 5555 # Подключение к серверу из тестов from playwright.sync_api import sync_playwright with sync_playwright() as pw: browser = pw.chromium.connect("ws://localhost:5555/playwright/chromium") page = browser.new_page() page.goto("https://example.com") print(page.title()) browser.close()
Кастомный Dockerfile
Если вам нужно добавить свои зависимости поверх официального образа:
FROM mcr.microsoft.com/playwright/python:v1.61.0-noble WORKDIR /app # Копирование зависимостей и установка COPY requirements.txt . RUN pip install -r requirements.txt # Копирование тестов COPY tests/ ./tests/ # Запуск тестов CMD ["pytest", "-v", "--tb=short"]
# Сборка образа docker build -t my-playwright-tests . # Запуск docker run --rm --ipc=host my-playwright-tests
Совет: Если вам не нужны все браузеры (например, только Chromium), можно сократить размер образа, установив только нужный браузер: playwright install chromium.
Docker Compose
Пример docker-compose.yml с сервером Playwright и тестовым сервисом:
version: "3.9" services: playwright-server: image: mcr.microsoft.com/playwright/python:v1.61.0-noble container_name: pw-server ipc: host ports: - "5555:5555" command: npx playwright run-server --port 5555 tests: build: . container_name: pw-tests ipc: host depends_on: - playwright-server environment: - PLAYWRIGHT_WS_ENDPOINT=ws://playwright-server:5555/playwright/chromium command: pytest -v --base-url=http://web:8000
noVNC для GitHub Codespaces
Playwright поддерживает noVNC для просмотра браузера в реальном времени из GitHub Codespaces. Это полезно для отладки.
# В .devcontainer/devcontainer.json или Dockerfile # Включение noVNC и VNC-сервера docker run -it --rm --ipc=host -p 6080:6080 \ -e DISPLAY=:99 \ mcr.microsoft.com/playwright/python:v1.61.0-noble \ /bin/bash -c "Xvfb :99 && x11vnc -display :99 -forever && pytest"
Внимание: Без флага --ipc=host Chromium может аварийно завершаться с ошибкой Navigation failed because browser has disconnected при открытии множества вкладок. Всегда добавляйте --ipc=host для production-нагрузки.
Seccomp-профиль для untrusted-сайтов
Если тесты посещают потенциально опасные (untrusted) сайты, используйте кастомный seccomp-профиль.
# Скачать профиль wget https://raw.githubusercontent.com/microsoft/playwright/main/utils/docker/seccomp_profile.json # Запуск с профилем docker run --rm --ipc=host \ --security-opt seccomp=seccomp_profile.json \ mcr.microsoft.com/playwright/python:v1.61.0-noble pytest
Запуск тестов внутри контейнера
Полный пример команды для запуска тестов с монтированием локальной директории:
docker run --rm --ipc=host \ -v "$(pwd)":/app \ -w /app \ mcr.microsoft.com/playwright/python:v1.61.0-noble \ bash -c "pip install -r requirements.txt && pytest --trace=on"