Toto je starší verze dokumentu!
Playwright MCP v Dockeru na Alpine Linux / ARM64
Vytvořeno: 5.5.2026 | Aktualizováno: 05.05.2026 11:30
Playwright MCP (`@playwright/mcp`) je MCP server, který AI umožňuje ovládat webový prohlížeč — navigovat stránky, klikat, vyplňovat formuláře nebo pořizovat screenshoty. Výchozí konfigurace počítá s tím, že si Playwright stáhne vlastní Chromium. V prostředí Docker na Alpine Linuxu s architekturou ARM64 to nefunguje, a je potřeba použít systémový chromium s wrapper skriptem.
Proč to nefunguje ve výchozí konfiguraci
Playwright při startu stáhne nebo spustí vlastní bundled Chromium. Na Alpine (musl libc) a ARM64 to selže ze dvou důvodů:
- Bundled Chromium je zkompilovaný proti glibc — na Alpine (musl) nespustíš, bez ohledu na architekturu
- Docker kontejner bez capability `SYS_ADMIN` nemá povolený namespace sandbox — Chromium padá s
Failed to move to new namespace: Operation not permitted
Řešení jsou dvě části:
- Použít systémový chromium instalovaný přes
apk add chromiummísto bundled - Vytvořit wrapper skript, který injectuje
–no-sandboxflagy — ty nelze předat přes parametr–executable-pathPlaywright MCP přímo
Příprava systémového Chromia
Na Alpine nainstaluj Chromium přes apk:
apk add chromium
Chromium se nainstaluje do /usr/bin/chromium (symlink na /usr/lib/chromium/chromium-launcher.sh). Ověř:
chromium --version # Chromium 147.x.x Alpine Linux
Wrapper skript
Playwright předává executovatelný soubor přes –executable-path, ale sandbox flagy tak předat nelze. Wrapper skript pouští systémový chromium s potřebnými flagy a předává mu všechny ostatní argumenty od Playwright.
Vytvoř soubor /home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh:
#!/bin/sh exec /usr/bin/chromium --no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage "$@"
Nastav spustitelná práva:
chmod +x /home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh
Co jednotlivé flagy dělají:
–no-sandbox— zakáže Chrome sandbox, který v Dockeru bezSYS_ADMINcapability padá–disable-setuid-sandbox— zakáže setuid sandbox (záloha k–no-sandbox)–disable-dev-shm-usage— Chromium místo/dev/shmpoužije tmp;/dev/shmmůže být v Dockeru omezený„$@“— předá všechny argumenty od Playwright dál do Chromia
Konfigurace pro Claude Code
Do ~/.claude.json do sekce mcpServers přidej:
"playwright": {
"type": "stdio",
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--isolated",
"--headless",
"--browser",
"chrome",
"--executable-path",
"/home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh",
"--storage-state=/home/aiwork/tools/playwright-storage/storage.json"
],
"env": {
"PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD": "1"
}
}
Klíčové parametry:
–browser chrome— Playwright spustí browser jako Chrome kanál, ne bundled chromium–executable-path— přesměruje spouštění na wrapper (ne přímo na/usr/bin/chromium, který by sandboxem padl)–headless— nutné v Dockeru bez X serveruPLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1— pojistka, aby se Playwright ani nepokusil o download–isolated— browser session je in-memory; cookies a stav se neuloží zpět na disk
Konfigurace pro OpenCode
Do ~/.config/opencode/opencode.json do sekce mcp přidej nebo uprav existující záznam playwright:
"playwright": {
"type": "local",
"command": [
"npx",
"@playwright/mcp@latest",
"--isolated",
"--headless",
"--browser",
"chrome",
"--executable-path",
"/home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh",
"--storage-state=/home/aiwork/tools/playwright-storage/storage.json"
],
"environment": {
"PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD": "1"
},
"enabled": true
}
Ověření
Funkčnost lze ověřit přímým MCP voláním před restartem — pošli inicializaci a browser_navigate přes stdin:
cd /tmp && ( printf '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1"}}}\n' printf '{"jsonrpc":"2.0","method":"tools/call","id":2,"params":{"name":"browser_navigate","arguments":{"url":"https://example.com"}}}\n' sleep 10 ) | PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npx @playwright/mcp@latest \ --headless --browser chrome \ --executable-path /home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh \ --isolated
Pokud druhá JSON odpověď obsahuje Page URL: https://example.com/ a Page Title: Example Domain, vše funguje.
Po ověření restartuj Claude Code (nebo zadej /exit a znovu spusť) nebo OpenCode, aby načetly nový MCP server. V Claude Code pak /mcp ukáže playwright v seznamu.
Rozdíl oproti standardní konfiguraci
Funkčně jde o ekvivalentní náhradu. Co se nezměnilo: @playwright/mcp@latest je pořád stejný MCP server, který řídí Chromium přes CDP (Chrome DevTools Protocol). Všechny tooly (browser_navigate, browser_click, browser_snapshot atd.) jsou identické.
Co se změnilo: pouze to, která binárka Chromia se spustí:
- Standardní setup (amd64, glibc): Playwright stáhne svůj bundled Chromium do
~/.cache/ms-playwright/ - Tento setup (Alpine, ARM64, Docker):
–executable-pathpřesměruje na wrapper → wrapper spustí systémový/usr/bin/chromiums–no-sandboxflagy
Drobný rozdíl: verze Chromia. Playwright si normálně tahá konkrétní pinnou verzi, tady se používá to, co je v Alpine repo (v3.23: verze 147). Pro běžné úkoly jako navigace, klikání, scraping nebo screenshoty je to bez praktického rozdílu.