为什么Docker容器无法读取docker-compose中配置的环境变量?
问题根源
你的docker-compose-dev.yaml中environment配置段存在语法错误,导致环境变量没有被正确注入容器:
你当前使用的短横线数组格式要求键值用=分隔,你误用了冒号,导致docker-compose将REDIS_HOST:redis整体识别为环境变量名,值被设为null,这也是你执行config命令时看到后缀null的原因。
解决步骤
修正
docker-compose-dev.yaml的environment配置,二选一即可:- 数组写法(保留短横线,用
=分隔)environment: - REDIS_HOST=${REDIS_HOST} - REDIS_PORT=${REDIS_PORT} - 对象写法(去掉短横线,用冒号分隔)
environment: REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT}
变量外层增加花括号是规范写法,避免特殊字符导致解析错误。
- 数组写法(保留短横线,用
验证配置:重新执行
docker-compose -f docker-compose-dev.yaml config,正常输出的environment段应为:environment: REDIS_HOST: redis REDIS_PORT: "6379"无多余的null后缀。
重新启动容器即可:
docker-compose -f docker-compose-dev.yaml up --build
可选优化说明
你settings.py中加载根目录.env的逻辑在容器内默认不会生效,因为你构建镜像时仅复制了app目录下的文件,宿主机根目录的.env没有被打入镜像也没有挂载到容器内。如果你后续需要直接在容器内加载.env文件,可以在docker-compose中增加volumes配置将.env挂载到容器对应路径,不过生产环境更推荐通过docker-compose注入环境变量的方式,避免敏感信息进入镜像。
内容的提问来源于stack exchange,提问作者741852963
相关产品推荐
相关产品推荐

