openclaw - 💡(How to fix) Fix [Bug]: Browser tool times out in Docker even though Playwright Chromium launches successfully manually [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#59869Fetched 2026-04-08 02:39:33
View on GitHub
Comments
0
Participants
1
Timeline
1
Reactions
0
Author
Participants
Timeline (top)
labeled ×1

Body: I’m running OpenClaw 2026.4.1 in Docker on a VPS (Ubuntu 22 host, Debian 12/bookworm container). Goal is to use the browser tool via WhatsApp.

What I observed:

  • browser tool with profile:"host-chrome" failed because remote CDP ws://172.18.0.1:9222 was unreachable
  • installed browser support in the container image and rebuilt
  • Playwright browsers are now present under /home/node/.cache/ms-playwright
  • manual Playwright launch inside the container works successfully
  • OpenClaw gateway starts normally
  • browser control server starts
  • browser control service reports ready
  • but browser tool open still times out

Evidence:

  • manual Playwright test inside container:
  • gateway logs show:
    • [browser/server] Browser control listening
    • [browser/service] Browser control service ready (profiles=3)
    • then browser tool fails with timeout
  • browser config originally had:
    • defaultProfile: "host-chrome"
    • cdpUrl: "ws://172.18.0.1:9222"
  • removed that default/broken host profile and restarted
  • timeout still persists

Docker/browser details:

  • shm_size: 2gb
  • cap_add: [SYS_ADMIN]
  • security_opt: [seccomp:unconfined]
  • Playwright install path exists and contains Chromium
  • manual Playwright launch confirms environment is healthy

Conclusion: This looks like an OpenClaw browser wrapper/service issue rather than a missing browser dependency or container hardening issue.

If helpful, I can also provide:

  • compose file
  • Dockerfile
  • exact manual Playwright command that succeeds

Error Message

docker exec -it openclaw-openclaw-gateway-1 bash -lc 'node -e "(async()=>{const { chromium } = require("playwright-core"); const browser = await chromium.launch({headless:true}); console.log("LAUNCHED"); const page = await browser.newPage(); await page.goto("https://example.com\", {waitUntil:"domcontentloaded", timeout:30000}); console.log(await page.title()); await browser.close();})().catch(err=>{console.error("PWERR_START"); console.error(err && (err.stack || err)); process.exit(1);})"'

Root Cause

What I observed:

  • browser tool with profile:"host-chrome" failed because remote CDP ws://172.18.0.1:9222 was unreachable
  • installed browser support in the container image and rebuilt
  • Playwright browsers are now present under /home/node/.cache/ms-playwright
  • manual Playwright launch inside the container works successfully
  • OpenClaw gateway starts normally
  • browser control server starts
  • browser control service reports ready
  • but browser tool open still times out
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

Body: I’m running OpenClaw 2026.4.1 in Docker on a VPS (Ubuntu 22 host, Debian 12/bookworm container). Goal is to use the browser tool via WhatsApp.

What I observed:

  • browser tool with profile:"host-chrome" failed because remote CDP ws://172.18.0.1:9222 was unreachable
  • installed browser support in the container image and rebuilt
  • Playwright browsers are now present under /home/node/.cache/ms-playwright
  • manual Playwright launch inside the container works successfully
  • OpenClaw gateway starts normally
  • browser control server starts
  • browser control service reports ready
  • but browser tool open still times out

Evidence:

  • manual Playwright test inside container:
  • gateway logs show:
    • [browser/server] Browser control listening
    • [browser/service] Browser control service ready (profiles=3)
    • then browser tool fails with timeout
  • browser config originally had:
    • defaultProfile: "host-chrome"
    • cdpUrl: "ws://172.18.0.1:9222"
  • removed that default/broken host profile and restarted
  • timeout still persists

Docker/browser details:

  • shm_size: 2gb
  • cap_add: [SYS_ADMIN]
  • security_opt: [seccomp:unconfined]
  • Playwright install path exists and contains Chromium
  • manual Playwright launch confirms environment is healthy

Conclusion: This looks like an OpenClaw browser wrapper/service issue rather than a missing browser dependency or container hardening issue.

If helpful, I can also provide:

  • compose file
  • Dockerfile
  • exact manual Playwright command that succeeds

Steps to reproduce

Repro summary

Environment:

  • OpenClaw 2026.4.1
  • VPS host: Ubuntu 22
  • Docker container: Debian 12 (bookworm)
  • Channel used to trigger: WhatsApp
  • Goal: use built-in browser tool from chat

Initial state

  • browser.defaultProfile was set to host-chrome
  • host-chrome pointed to ws://172.18.0.1:9222
  • that CDP endpoint was not reachable

What we changed

  1. Added browser support to the Docker image
  2. Rebuilt and restarted the stack
  3. Confirmed Playwright browsers installed
  4. Confirmed manual Playwright launch works
  5. Removed broken host-chrome default/profile from config
  6. Restarted again
  7. Browser tool still times out

Exact symptoms

  • Browser logs show:
    • browser control server starts
    • browser control service becomes ready
  • Then tool call:
  • Result:
    • timeout
    • message says to restart gateway, but restart does not fix it

Proof the environment itself works Inside the container, this succeeds:

bash docker exec -it openclaw-openclaw-gateway-1 bash -lc 'node -e "(async()=>{const { chromium } = require("playwright-core"); const browser = await chromium.launch({headless:true}); console.log("LAUNCHED"); const page = await browser.newPage(); await page.goto("https://example.com\", {waitUntil:"domcontentloaded", timeout:30000}); console.log(await page.title()); await browser.close();})().catch(err=>{console.error("PWERR_START"); console.error(err && (err.stack || err)); process.exit(1);})"'

Output: text LAUNCHED Example Domain

Proof browser assets are present Inside container: bash docker exec -it openclaw-openclaw-gateway-1 bash -lc 'ls -R /home/node/.cache/ms-playwright | head -100'

Shows:

  • chromium-1208
  • chromium_headless_shell-1208
  • ffmpeg-1011

OpenClaw logs around failure Relevant lines:

  • [browser/server] Browser control listening on http://127.0.0.1:18791/ (auth=token)
  • [browser/service] Browser control service ready (profiles=3)
  • then:
  • [tools] browser failed: timed out ... raw_params={"action":"open","target":"host","profile":"openclaw","url":"https://example.com"}

Config note Original browser config was:

json { "enabled": true, "defaultProfile": "host-chrome", "profiles": { "host-chrome": { "cdpUrl": "ws://172.18.0.1:9222", "color": "#FF6600" } } }

We removed defaultProfile and removed host-chrome, restarted, retried, and the timeout still happens.

Conclusion This appears reproducible as:

  • Docker deployment
  • Playwright Chromium installed and manually working
  • OpenClaw browser service starts
  • browser tool open still times out

If you want, I can also compress this into an even tighter 5-bullet repro version for GitHub comments

Expected behavior

Should allow connection via browser tool.

Actual behavior

It doesn- connect.

OpenClaw version

April 1 2026.

Operating system

Ubuntu 22

Install method

No response

Model

gpt 5.4 codex

Provider / routing chain

rovider / routing chain Trigger path: - User sends command via WhatsApp - WhatsApp message reaches OpenClaw gateway - Assistant receives the message and calls the built-in browser tool - Tool invocation is: - action: open - target: host - profile: openclaw - url: https://example.com Observed internal chain from logs: - WhatsApp inbound handled by gateway - OpenClaw browser tool routes into browser control service - browser control service starts successfully - browser service reports ready - then the browser tool request times out before completing page open Relevant log sequence: - [whatsapp] Inbound message ... - [browser/server] Browser control listening on http://127.0.0.1:18791/ (auth=token) - [browser/service] Browser control service ready (profiles=3) - [tools] browser failed: timed out ... raw_params={"action":"open","target":"host","profile":"openclaw","url":"https://example.com"} So the routing chain is: WhatsApp → OpenClaw gateway → assistant tool call → browser tool → browser control server/service → timeout Important clarification: - This is not going through external browser SaaS or a third-party provider - It appears to be entirely local to the OpenClaw gateway/container - Manual in-container Playwright works, so the failure is likely between OpenClaw’s browser tool layer and its browser control/launch path, not upstream of the gateway and not in Chromium itself

Additional provider/model setup details

rovider / routing chain

Trigger path:

  • User sends command via WhatsApp
  • WhatsApp message reaches OpenClaw gateway
  • Assistant receives the message and calls the built-in browser tool
  • Tool invocation is:

Observed internal chain from logs:

  • WhatsApp inbound handled by gateway
  • OpenClaw browser tool routes into browser control service
  • browser control service starts successfully
  • browser service reports ready
  • then the browser tool request times out before completing page open

Relevant log sequence:

  • [whatsapp] Inbound message ...
  • [browser/server] Browser control listening on http://127.0.0.1:18791/ (auth=token)
  • [browser/service] Browser control service ready (profiles=3)
  • [tools] browser failed: timed out ... raw_params={"action":"open","target":"host","profile":"openclaw","url":"https://example.com"}

So the routing chain is:

WhatsApp → OpenClaw gateway → assistant tool call → browser tool → browser control server/service → timeout

Important clarification:

  • This is not going through external browser SaaS or a third-party provider
  • It appears to be entirely local to the OpenClaw gateway/container
  • Manual in-container Playwright works, so the failure is likely between OpenClaw’s browser tool layer and its browser control/launch path, not upstream of the gateway and not in Chromium itself

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

rovider / routing chain

Trigger path:

  • User sends command via WhatsApp
  • WhatsApp message reaches OpenClaw gateway
  • Assistant receives the message and calls the built-in browser tool
  • Tool invocation is:

Observed internal chain from logs:

  • WhatsApp inbound handled by gateway
  • OpenClaw browser tool routes into browser control service
  • browser control service starts successfully
  • browser service reports ready
  • then the browser tool request times out before completing page open

Relevant log sequence:

  • [whatsapp] Inbound message ...
  • [browser/server] Browser control listening on http://127.0.0.1:18791/ (auth=token)
  • [browser/service] Browser control service ready (profiles=3)
  • [tools] browser failed: timed out ... raw_params={"action":"open","target":"host","profile":"openclaw","url":"https://example.com"}

So the routing chain is:

WhatsApp → OpenClaw gateway → assistant tool call → browser tool → browser control server/service → timeout

Important clarification:

  • This is not going through external browser SaaS or a third-party provider
  • It appears to be entirely local to the OpenClaw gateway/container
  • Manual in-container Playwright works, so the failure is likely between OpenClaw’s browser tool layer and its browser control/launch path, not upstream of the gateway and not in Chromium itself

extent analysis

TL;DR

The most likely fix is to investigate and adjust the configuration or implementation of the OpenClaw browser tool and its interaction with the browser control service, as manual Playwright launch inside the container works successfully.

Guidance

  1. Verify Browser Control Service Configuration: Check the configuration of the browser control service to ensure it is correctly set up to handle the browser tool requests, especially after removing the default "host-chrome" profile.
  2. Inspect OpenClaw Browser Tool Logs: Dive deeper into the logs of the OpenClaw browser tool to identify any specific errors or warnings that might indicate why the request times out before completing the page open.
  3. Test with Different Profiles: If available, try using different profiles with the browser tool to see if the issue is profile-specific or if it's a general problem with the browser control service.
  4. Check for Resource Limitations: Ensure that the Docker container has sufficient resources (CPU, memory, etc.) to run the browser control service and the browser tool without limitations that could cause timeouts.

Example

No specific code example can be provided without more details on the OpenClaw configuration and implementation. However, the manual Playwright launch command that succeeds inside the container could serve as a reference for how the browser should be launched:

node -e "(async()=>{const { chromium } = require(\"playwright-core\"); const browser = await chromium.launch({headless:true}); console.log(\"LAUNCHED\"); const page = await browser.newPage(); await page.goto(\"https://example.com\", {waitUntil:\"domcontentloaded\", timeout:30000}); console.log(await page.title()); await browser.close();})().catch(err=>{console.error(\"PWERR_START\"); console.error(err && (err.stack || err)); process.exit(1);})"

Notes

The issue seems to be specific to the interaction between the OpenClaw browser tool and the browser control service. Given that manual Playwright launch works, the problem likely lies in how OpenClaw's browser tool layer interacts with its browser control/launch path.

Recommendation

Apply a workaround by adjusting the OpenClaw browser tool configuration or implementation to correctly interact with the browser control service, as the manual Playwright launch inside the container is successful, indicating that the environment itself is capable of launching browsers.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

Should allow connection via browser tool.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING