Skip to content

[Docs]: 明确 Docker config.yaml 的加载和环境变量覆盖行为 #39

Description

@chenyme

Documentation area

Docker / deployment

Location

README.md#docker-deployment, README.zh-CN.md#docker-部署, docker-compose.yml, docker-compose.full.yml, config.docker.example.yaml

What is missing, unclear, or outdated?

Docker 全量部署时,config.yaml 的读取方式和环境变量覆盖规则不够清晰,容易让部署用户误以为配置文件没有生效。

实际部署中,已将配置文件挂载到容器内:

volumes:
  - ./config.yaml:/app/config.yaml:ro

并尝试指定:

CONFIG_FILE: "/app/config.yaml"
CONFIG_PATH: "/app/config.yaml"

但最终发现只有把关键配置全部写入 compose environment 后才部署成功。

从当前代码和 compose 示例看,有几个地方需要文档明确说明:

  • Docker 镜像工作目录是 /app,默认会尝试读取 /app/config.yaml。
  • 当前自定义配置路径只支持 CONFIG_FILE,不支持 CONFIG_PATH。
  • 配置优先级是:环境变量 > config.yaml > 代码默认值。
  • docker-compose.full.yml 默认写了 POSTGRES_DSN、REDIS_ADDR、REDIS_PASSWORD,这些会覆盖 config.yaml 中对应配置。
  • config.yaml 主要用于静态基础设施配置,部分运行时业务配置由数据库 settings 和后台管理控制,不会从 YAML 读取。

这些信息如果没有集中说明,会让 Docker 部署用户很难判断到底是配置文件没挂载、路径不对、环境变量覆盖,还是某些配置本来就不从 YAML 读取。

Suggested update

建议补充 Docker 部署配置说明:

  1. 明确 Docker 中默认配置文件路径:
/app/config.yaml
  1. 明确支持的自定义配置路径变量:
CONFIG_FILE: "/app/config.yaml"

并说明当前不支持 CONFIG_PATH。

  1. 明确配置优先级:
环境变量 > config.yaml > 代码默认值
  1. 在 full compose 示例中说明以下环境变量会覆盖 config.yaml:
POSTGRES_DSN
REDIS_ADDR
REDIS_PASSWORD
  1. 增加一个推荐的 Docker 配置示例,说明两种方式:
  • 方式一:主要使用 config.yaml,compose 中只保留必要挂载。
  • 方式二:主要使用 environment,适合平台化部署和密钥注入。
  1. 明确区分:
  • 静态基础设施配置:从 config.yaml 或环境变量读取。
  • 运行时业务配置:从数据库 settings 读取,并通过后台管理修改。
  1. 如果可能,建议文档提示启动日志中应检查实际加载的配置文件路径,便于排查。

Impact

Operators / deployers

Pre-submit checklist

  • I searched existing issues and pull requests.
  • I included the specific documentation location when available.

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentation

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions