Playwright + Docker: стабильное окружение в CI "У меня локально тест проходит" — любимая фраза, которую убивает Docker.

Разные версии Chromium на ноуте и в CI, отличающиеся системные шрифты, разные таймзоны — всё это источники нестабильности, которые исчезают с одной строкой в Dockerfile.

Базовый Dockerfile:

#Используем официальный образ — браузеры уже внутри

FROM mcr.microsoft.com/playwright:v1.44.0-jammy

WORKDIR /app

#Сначала зависимости (кэш слой)

COPY package*.json ./ RUN npm ci

#Потом исходники

COPY . .

#Запуск тестов

CMD ["npx", "playwright", "test"]

Официальный образ mcr.microsoft.com/playwright включает нужные версии Chromium, Firefox и WebKit. Никакого npx playwright install — всё уже там.

Критичные флаги при запуске: docker run --ipc=host # Chromium требует shared memory --user pwuser # Не root — безопасность и стабильность -v $(pwd)/results:/app/test-results # Монтируем отчёты playwright-tests

--ipc=host — это не опционально. Без него Chromium падает с SIGSEGV из-за нехватки shared memory. Трачу на поиск этой ошибки 40 минут при первой настройке — теперь вы не потратите.

Docker Compose для локальной разработки: services: tests: build: . ipc: host user: pwuser volumes:

  • ./test-results:/app/test-results environment:
  • CI=true

В GitHub Actions:

  • name: Run tests in Docker run: | docker build -t pw-tests . docker run --ipc=host --user pwuser -v ${{ github.workspace }}/results:/app/test-results pw-tests

Отлаживать тесты внутри контейнера можно через docker run -it --entrypoint bash — получите интерактивный шелл с тем же окружением, что и в CI.

Используете Docker для тестов или запускаете напрямую на раннерах CI? Я перешёл на Docker после третьего «у меня работает» подряд — и не пожалел.

#playwright #docker #ci_cd #sdet #github_actions @haradkou_sdet