Docker启动Flask服务时无法找到.env文件导致FLASK_APP配置错误
问题根因
你的flask-dev服务配置了挂载规则./:/app,容器启动时会用本地项目根目录完全覆盖容器内的/app路径:
- 构建阶段你在Dockerfile中复制到
/app/.env的配置文件,会被挂载操作直接覆盖清空 - 若本地项目根目录没有自行创建
.env文件,容器内/app路径下就不存在.env,Flask/Pipenv无法读取到FLASK_APP变量 - 你将
.env复制到容器根目录/.env时,该路径不在挂载覆盖范围内,文件不会被清空,所以服务可以正常启动
解决方案
以下三种方案任选即可:
- 方案1:本地创建.env文件
直接在本地项目根目录(和docker-compose.yml同级)执行cp .env.example .env,挂载后容器内的/app/.env会自动同步本地配置,无需修改Dockerfile或docker-compose配置,是本地开发最常用的方案。 - 方案2:排除.env文件的挂载覆盖
修改docker-compose.yml中的默认挂载规则,新增一行指定容器内的/app/.env不使用本地挂载的版本,保留构建时复制的内容:
该方案既保留了本地代码挂载热更新的能力,又不会覆盖镜像内置的默认配置。x-default-volumes: &default_volumes volumes: - ./:/app - /app/.env # 新增该行 - ./dev.db:/tmp/dev.db - 方案3:固定.env加载路径
在Dockerfile的development阶段新增环境变量,指定Pipenv固定读取根目录的.env文件:
该方案适合需要将默认配置固化到镜像内的场景。COPY .env.example /.env ENV PIPENV_DOTENV_LOCATION=/.env
内容的提问来源于stack exchange,提问作者rickyrichboy
相关产品推荐
相关产品推荐

