[Bug]: Hardened docker-compose (read_only) keeps full Chromium from starting: crashpad needs a writable ~/.config

未关闭 适合新手
#2,494 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 2 天内回复

@HhH666-ux 已经在做这个了。

开始于 2026年11月4日。

  • #2496 来自 @HhH666-ux —— 未关闭

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
70/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
docker, docker-compose

调研方向

从 environment: 列表开始(位于 x-base-config 中,文件为 docker-compose.yml),issue 建议在此添加 XDG_CONFIG_HOME=/tmp/.config。同时检查同一文件中的只读和 tmpfs 设置,并确认 XDG_CACHE_HOME 保持未设置。当启动时 docker compose logs crawl4ai 不再显示 "Full Chromium failed" 这一行,即为完成。

由索引模型根据 Issue 内容生成。

描述

crawl4ai version

0.9.5 Docker image with PR #2448 backported, run with the hardened docker-compose.yml (same file on v0.9.5 and develop: read_only: true, tmpfs list).

Expected Behavior

With #2448 (merged into develop on 2026-10-26), the hardened compose launches full Chromium, which is the fix for #2382.

Current Behavior

In the hardened container, full Chromium dies at launch:

[BROWSER]. ℹ Full Chromium failed to start (BrowserType.launch: Target page, context or browser has been closed); falling back to chrome-headless-shell, which can behave differently. Run 'crawl4ai-setup' to install full Chromium.

The #2448 fallback then starts chrome-headless-shell, so with the official compose the server keeps running the shell and #2382 stays unfixed in practice.
The warning's advice also misleads here: full Chromium is already in the image (chromium-1248).

Root cause: Chromium's crash handler (crashpad) keeps its database under the XDG config directory ($HOME/.config/google-chrome-for-testing/Crash Reports), even when --user-data-dir points elsewhere, as Playwright's does.
The read-only root filesystem leaves $HOME/.config unwritable.
Run by hand in the container with a user data dir under /tmp, the bundled browser fails the same way:

$ /home/appuser/.cache/ms-playwright/chromium-1248/chrome-linux64/chrome --headless=new --no-sandbox --user-data-dir=/tmp/udd --dump-dom about:blank
chrome_crashpad_handler: --database is required
Trace/breakpoint trap
Is this reproducible?

Yes

Steps to Reproduce
# From a develop checkout (#2448 included); the compose file has a build: section.
docker compose up -d --build
docker compose logs crawl4ai | grep "Full Chromium failed"

The line appears at boot, since the server starts its default browser at startup.

Suggested fix

Give Chromium a writable config directory, for example by adding to the environment: list of x-base-config in docker-compose.yml:

    - XDG_CONFIG_HOME=/tmp/.config

With it, full Chromium starts: chromium-1248/chrome-linux64/chrome runs, crashpad uses --database=/tmp/.config/google-chrome-for-testing/Crash Reports, and no fallback line is logged.
XDG_CACHE_HOME must stay unset, as Playwright looks for its browsers under ~/.cache/ms-playwright (see also #2027 for the same read-only constraint).
Alternatives, not tested: an ENV XDG_CONFIG_HOME=/tmp/.config line in the Dockerfile (would also cover docker run --read-only), or a tmpfs entry - /home/appuser/.config:uid=999,gid=999,mode=0700.

OS

Linux (Docker on WSL2)

Python version

3.12 (image)

Browser

Chromium bundled with Playwright 1.64

Browser version

156.0.8078.4

主要语言
Python
星标
86.8k
派生
9k
平均合并
2 天 3 小时
30 天内合并 PR
26

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

unclecode/crawl4ai 的其他 Issue

查看 unclecode/crawl4ai 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。