diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a6d24ba..ac4797f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -193,10 +193,10 @@ jobs: command: - -c - > - until mc alias set local "$MINIO_ENDPOINT" "$MINIO_ACCESS_KEY" "$MINIO_SECRET_KEY"; do + until mc alias set local "$$MINIO_ENDPOINT" "$$MINIO_ACCESS_KEY" "$$MINIO_SECRET_KEY"; do sleep 1; done; - mc mb -p "local/$MINIO_BUCKET" || true; + mc mb -p "local/$$MINIO_BUCKET" || true; restart: "no" api: diff --git a/MEMORY.md b/MEMORY.md index 92d6d08..6f7fa2a 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -238,6 +238,11 @@ - 最小运行态验收: - `docker compose ps`(关键服务 `api/web/celery-worker/celery-beat/db/redis/minio` 为 Up,关键依赖健康)。 - `curl -fsS http://127.0.0.1:8000/health` 返回 API 健康 JSON。 + +## Compose 变量转义口径(2026-04-30) + +- 在 `docker-compose*.yml` 的 `command`/`entrypoint`(尤其是 `sh -c`)中,若变量需要在容器内 shell 阶段展开,必须写成 `$$VAR`,避免被 Compose 在渲染阶段提前插值为空或错误值。 +- `minio-init` 场景基线:`mc alias set` 与 `mc mb` 命令中的 `MINIO_*` 一律使用 `$$MINIO_*`。 - `curl -I -fsS http://127.0.0.1:3000/` 返回 `HTTP/1.1 200 OK`。 - 结合 `docker compose logs --tail` 抽样检查 `api/web/celery-worker/celery-beat` 启动日志是否正常。 diff --git a/docker-compose.yml b/docker-compose.yml index 3137295..1c06ebd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -67,10 +67,10 @@ services: command: - -c - > - until mc alias set local "$MINIO_ENDPOINT" "$MINIO_ACCESS_KEY" "$MINIO_SECRET_KEY"; do + until mc alias set local "$$MINIO_ENDPOINT" "$$MINIO_ACCESS_KEY" "$$MINIO_SECRET_KEY"; do sleep 1; done; - mc mb -p "local/$MINIO_BUCKET" || true; + mc mb -p "local/$$MINIO_BUCKET" || true; restart: "no" api: diff --git a/memory/2026-04-30.md b/memory/2026-04-30.md index 8f55ad8..a7761fb 100644 --- a/memory/2026-04-30.md +++ b/memory/2026-04-30.md @@ -28,3 +28,22 @@ - 风险与影响: - 影响范围:Docker 暴露端口与本机直连默认端口。 - 若已有外部脚本/客户端固定连接 `5433`,需同步改为 `5434` 或显式覆盖 `POSTGRES_PORT/DB_PORT`。 + +## Work Log - 修复 minio-init 变量被 Compose 提前替换(2026-04-30) + +- 背景: + - `minio-init` 的 shell 命令中直接使用 `$MINIO_*`,会在 Compose 渲染阶段被提前插值,导致容器内拿不到期望值。 + +- 本次改动: + - `docker-compose.yml` + - `minio-init.command` 中的 `$MINIO_ENDPOINT/$MINIO_ACCESS_KEY/$MINIO_SECRET_KEY/$MINIO_BUCKET` 统一改为 `$$MINIO_*`,确保在容器 shell 执行时再展开。 + - `.github/workflows/main.yml` + - 同步修复部署流程里生成的 `docker-compose.prod.yml` 模板片段,避免线上 compose 仍回归单 `$`。 + +- 验证: + - `git diff -- docker-compose.yml .github/workflows/main.yml`:确认仅发生 `$ -> $$` 的目标改动。 + - `docker compose config`:通过(`compose_ok`),Compose 语法与渲染正常。 + +- 风险与影响: + - 影响范围仅为 `minio-init` 启动命令的变量展开时机,不影响 `environment` 注入值本身。 + - 若后续新增 `command: /bin/sh -c` 且需要容器内展开变量,仍需遵循 `$$VAR` 规则。