From 75a567611b551f6772885f6a3b5a505329c26972 Mon Sep 17 00:00:00 2001 From: skycurtain Date: Tue, 13 Oct 2026 11:03:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20COPY=20--chmod=3D755=20=E6=A0=B9?= =?UTF-8?q?=E6=B2=BB=E5=8D=95=E6=96=87=E4=BB=B6=E4=BA=8C=E8=BF=9B=E5=88=B6?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1=E5=8F=AF=E6=89=A7=E8=A1=8C=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Windows 打包与跨机传输会使 naku-* 丢掉 +x,容器内 exec 以 126 (Permission denied)退出,migrate 失败后 server/engine 不会启动。 镜像内用 COPY --chmod=755 固定可执行位,并同步部署方案说明。 --- Dockerfile | 3 ++- docs/design/部署方案.md | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index a347b7a..360a43d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates libstdc++6 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app -COPY release/naku-server release/naku-engine release/naku-migrate /app/ +# --chmod:Windows 打包 / 跨机传输常丢可执行位,缺 x 时容器内 exec 以 126 退出 +COPY --chmod=755 release/naku-server release/naku-engine release/naku-migrate /app/ COPY release/drizzle /app/drizzle ENV MIGRATIONS_FOLDER=/app/drizzle CMD ["/app/naku-server"] diff --git a/docs/design/部署方案.md b/docs/design/部署方案.md index d65d220..1fad29a 100644 --- a/docs/design/部署方案.md +++ b/docs/design/部署方案.md @@ -117,7 +117,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates libstdc++6 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app -COPY release/naku-server release/naku-engine release/naku-migrate /app/ +# --chmod:Windows 打包 / 跨机传输常丢可执行位,缺 x 时容器内 exec 以 126 退出 +COPY --chmod=755 release/naku-server release/naku-engine release/naku-migrate /app/ COPY release/drizzle /app/drizzle ENV MIGRATIONS_FOLDER=/app/drizzle CMD ["/app/naku-server"] @@ -131,6 +132,7 @@ COPY release/dist /srv 要点: - **构建期不编译业务代码**,只装配产物;`docker compose up -d --build` 的语义是「用当前 `release/` 重建镜像并重启」; +- 单文件二进制用 **`COPY --chmod=755`**:Windows 打包 / 跨机传输常丢可执行位,缺 `x` 时容器内 `exec` 以 **exit 126**(Permission denied)退出,迁移与应用都不会启动; - `app` 阶段一个镜像供 `server` / `engine` / `migrate` 三用,靠 compose 的 `command` 区分; - 应用运行时选 **`debian:bookworm-slim`**(glibc,对齐 Bun `--compile` 目标);`ca-certificates`(HTTPS 证书校验)与 `libstdc++6`(单文件 C++ 运行时)显式安装——两个都不指望镜像自带; - 网关仍用官方 `caddy:2-alpine`(与应用基底无关,体积友好); @@ -261,6 +263,7 @@ docker compose ps | 何时跑? | 每次固定命令(含首次)启动/更新时 | | 不用什么? | **不用 `db:push` 进部署链**——它是 schema diff 硬推,不适合生产更新命令 | | 失败怎么办? | `migrate` 非 0 退出 → `server`/`engine` 不启动;修复 SQL 或数据后重跑固定命令 | +| `migrate` exit 126? | 二进制缺可执行位(Windows 打包 / 传输丢 `x`)。镜像内已 `COPY --chmod=755` 根治;宿主机侧应急 `chmod +x release/naku-*` 后 rebuild | ---