You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Docker容器无法读取docker-compose中配置的环境变量?

问题根源

你的docker-compose-dev.yaml中environment配置段存在语法错误,导致环境变量没有被正确注入容器:
你当前使用的短横线数组格式要求键值用=分隔,你误用了冒号,导致docker-compose将REDIS_HOST:redis整体识别为环境变量名,值被设为null,这也是你执行config命令时看到后缀null的原因。

解决步骤

  1. 修正docker-compose-dev.yaml的environment配置,二选一即可:

    • 数组写法(保留短横线,用=分隔)
      environment:
        - REDIS_HOST=${REDIS_HOST}
        - REDIS_PORT=${REDIS_PORT}
      
    • 对象写法(去掉短横线,用冒号分隔)
      environment:
        REDIS_HOST: ${REDIS_HOST}
        REDIS_PORT: ${REDIS_PORT}
      

    变量外层增加花括号是规范写法,避免特殊字符导致解析错误。

  2. 验证配置:重新执行docker-compose -f docker-compose-dev.yaml config,正常输出的environment段应为:

    environment:
      REDIS_HOST: redis
      REDIS_PORT: "6379"
    

    无多余的null后缀。

  3. 重新启动容器即可:

    docker-compose -f docker-compose-dev.yaml up --build
    

可选优化说明

你settings.py中加载根目录.env的逻辑在容器内默认不会生效,因为你构建镜像时仅复制了app目录下的文件,宿主机根目录的.env没有被打入镜像也没有挂载到容器内。如果你后续需要直接在容器内加载.env文件,可以在docker-compose中增加volumes配置将.env挂载到容器对应路径,不过生产环境更推荐通过docker-compose注入环境变量的方式,避免敏感信息进入镜像。


内容的提问来源于stack exchange,提问作者741852963

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 15:54:04