fix(docker): 为容器内 rakuten 用户建 home 目录,修复 Chromium 启动 SIGTRAP

rakuten 用户是 useradd --no-create-home 建的,HOME 指向不存在的目录。
Chromium 启动时要写 $HOME/.config、~/.pki,写不了就 CHECK 失败触发
int3(SIGTRAP)自杀,Playwright 侧表现为 BrowserType.launch: Target closed。

- Dockerfile / Dockerfile.trading:ENV 增加 HOME=/home/rakuten,
  mkdir + chown 补上 /home/rakuten
- 抓取镜像同样修:浏览器兜底(browser_fallback)也是非 root 跑 Chromium,
  属同一隐患

实测验证:docker run 加 -e HOME=/tmp 后 chrome 可正常 --dump-dom 输出
This commit is contained in:
2026-08-16 20:59:28 +08:00
parent c263793fb2
commit 912e10086f
2 changed files with 12 additions and 6 deletions
+6 -3
View File
@@ -47,6 +47,9 @@ ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
VIRTUAL_ENV=/app/.venv \
PATH="/app/.venv/bin:${PATH}" \
# rakuten 用户是 --no-create-home 建的;Chromium(浏览器兜底)启动要写
# $HOME/.config、~/.pki,HOME 指向不存在的目录时会 CHECK 失败 SIGTRAP 自杀
HOME=/home/rakuten \
PLAYWRIGHT_BROWSERS_PATH=/ms-playwright \
# Playwright 浏览器二进制走 npmmirror 镜像,避免从 azureedge 拉取缓慢
PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.npmmirror.com/binaries/playwright \
@@ -108,9 +111,9 @@ WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
COPY --from=builder /app/app /app/app
# 可写目录:logs(Loguru)、浏览器二进制(~300MB)
RUN mkdir -p /app/logs /ms-playwright \
&& chown -R rakuten:rakuten /app /ms-playwright
# 可写目录:logs(Loguru)、浏览器二进制(~300MB)、/home/rakuten(Chromium 的 ~/.config 等)
RUN mkdir -p /app/logs /ms-playwright /home/rakuten \
&& chown -R rakuten:rakuten /app /ms-playwright /home/rakuten
USER rakuten
+6 -3
View File
@@ -48,6 +48,9 @@ ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
VIRTUAL_ENV=/app/.venv \
PATH="/app/.venv/bin:${PATH}" \
# rakuten 用户是 --no-create-home 建的;Chromium 启动要写 $HOME/.config、~/.pki,
# HOME 指向不存在的目录时会 CHECK 失败直接 SIGTRAP(int3)自杀
HOME=/home/rakuten \
PLAYWRIGHT_BROWSERS_PATH=/ms-playwright \
PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.npmmirror.com/binaries/playwright \
# 落库时间戳全是 UTC aware(local_db/task_queue 用 datetime.now(timezone.utc)),
@@ -155,10 +158,10 @@ ENTRYPOINT_SH
# 可写目录:logs(Loguru)、data(订单 SQLite + 证据)、.auth(登录态 cookie)、
# .browser-data(login.py 的持久化浏览器目录)、/ms-playwright(Chromium 二进制)、
# /tmp/.X11-unix(Xvfb socket,非 root 也要能建)
RUN mkdir -p /app/logs /app/data /app/.auth /app/.browser-data /ms-playwright /tmp/.X11-unix \
# /tmp/.X11-unix(Xvfb socket,非 root 也要能建)、/home/rakuten(Chromium 的 ~/.config 等)
RUN mkdir -p /app/logs /app/data /app/.auth /app/.browser-data /ms-playwright /tmp/.X11-unix /home/rakuten \
&& chmod 1777 /tmp/.X11-unix \
&& chown -R rakuten:rakuten /app /ms-playwright
&& chown -R rakuten:rakuten /app /ms-playwright /home/rakuten
USER rakuten