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

Docker绑定挂载修改Flask代码后API不生效,需重启容器排查

问题描述
  • 场景:Flask应用通过Docker绑定挂载部署,修改本地src/app.py文件后,容器内对应文件已同步更新,但Postman调用API无法看到修改效果,必须重启容器才生效。
  • 容器启动命令:
    docker run -p 9000:5000 --mount type=bind,source="$(pwd)"/src/,target=/src/ voting-app:latest
    
  • Dockerfile内容:
    FROM python:3.8.10-alpine
    
    COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    
    COPY ./src ./src
    
    WORKDIR ./src
    
    ENTRYPOINT ["python"]
    
    CMD ["app.py"]
    
  • 已排查:容器内app.py文件确实同步了修改,目录挂载无inode异常,使用Docker版本为20.10.17。
解决方案

核心原因是Flask默认未启用开发模式的自动重载机制,即便文件内容更新,运行中的Flask进程也不会自动加载新代码,需手动触发重启。以下两种方法可解决:

方法一:通过环境变量开启自动重载

无需修改Dockerfile,启动容器时注入FLASK_ENV=development环境变量,Flask会自动开启文件变化检测与重载:

docker run -p 9000:5000 -e FLASK_ENV=development --mount type=bind,source="$(pwd)"/src/,target=/src/ voting-app:latest

也可以把环境变量写入Dockerfile,避免每次启动都添加参数:
在Dockerfile的WORKDIR ./src后添加:

ENV FLASK_ENV=development

重新构建镜像后启动即可。

方法二:改用flask run命令启动

修改Dockerfile,使用flask run命令并显式开启重载,同时配置必要环境变量:

FROM python:3.8.10-alpine

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY ./src ./src

WORKDIR ./src

ENV FLASK_APP=app.py
ENV FLASK_ENV=development

ENTRYPOINT ["flask"]

CMD ["run", "--host=0.0.0.0", "--port=5000", "--reload"]

重新构建镜像后启动容器,后续修改本地app.py,Flask会自动重启加载新代码。

注意事项

  • 上述方案仅适用于开发场景,生产环境禁止使用FLASK_ENV=development,建议采用Gunicorn、uWSGI等专业WSGI服务器部署,此时代码变更需手动重启服务。
  • 绑定挂载的目录可正常触发Flask的文件变化通知,无需额外配置文件系统监听。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:36:40