Potřeboval jsem, aby AI běžící v Docker kontejneru ovládala můj hostitelský Google Chrome přes Playwright MCP a CDP. Cílem bylo zachovat běžný viditelný Chrome mimo kontejner a přitom ho zpřístupnit kontejneru bez přímého otevření portu do celé sítě.
Na hostitelském počítači jsem povolil přístup z Docker bridge sítě na port 9222. Toto pravidlo stačí nastavit jednou:
ufw allow in on docker0 proto tcp from 172.17.0.0/16 to any port 9222
Do konfigurace OpenCode jsem přidal druhý Playwright MCP server, který se nepřipojuje na lokální prohlížeč v kontejneru, ale na hostitelský Chrome přes Docker gateway 172.17.0.1:9222:
"playwright-chrome": {
"type": "local",
"command": [
"npx",
"@playwright/mcp@latest",
"--cdp-endpoint",
"http://172.17.0.1:9222"
],
"enabled": true
}
Po této úpravě musím restartovat OpenCode nebo otevřít novou session, aby se nová MCP konfigurace načetla.
127.0.0.1:9222.socat vystaví tento lokální port do Docker bridge sítě jako 172.17.0.1:9222.http://172.17.0.1:9222.9222; další hostitelské porty řeším samostatnými firewall pravidly.Při každém použití nejdřív zpřístupním hostitelský localhost port do Docker bridge sítě:
socat TCP-LISTEN:9222,bind=172.17.0.1,reuseaddr,fork TCP:127.0.0.1:9222
Pak na hostitelském počítači spustím běžný Chrome s remote debuggingem. Nepoužívám headless režim, takže vidím reálné okno prohlížeče:
google-chrome --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 --user-data-dir=/tmp/pw-profile
Tento setup mi odděluje prohlížeč od Docker kontejneru, ale pořád umožňuje jeho ovládání přes MCP. Chrome zůstává vázaný jen na 127.0.0.1, zatímco socat dělá kontrolovaný most do Docker bridge sítě. Díky tomu AI v kontejneru pracuje s hostitelským Chrome, aniž bych musel prohlížeč spouštět uvnitř Dockeru.
Tento postup používám, když chci ovládat hostitelský non-headless Chrome z Docker prostředí přes Playwright MCP. Získal jsem jednoduché a opakovatelné řešení, které kombinuje lokální bezpečnost, viditelný prohlížeč a připojení přes CDP.