From 912e10086f08809c51850d82c03b442592aa9b79 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 16 Aug 2026 20:59:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker):=20=E4=B8=BA=E5=AE=B9=E5=99=A8?= =?UTF-8?q?=E5=86=85=20rakuten=20=E7=94=A8=E6=88=B7=E5=BB=BA=20home=20?= =?UTF-8?q?=E7=9B=AE=E5=BD=95,=E4=BF=AE=E5=A4=8D=20Chromium=20=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=20SIGTRAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 输出 --- Dockerfile | 9 ++++++--- Dockerfile.trading | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index f1558ec..c2425cf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/Dockerfile.trading b/Dockerfile.trading index 97c0890..a56a067 100644 --- a/Dockerfile.trading +++ b/Dockerfile.trading @@ -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