Flask Docker容器新增依赖报502、配置文件删除仍运行问题咨询
Docker部署Flask添加依赖相关问题解答
你遇到的依赖不生效的核心原因是:修改依赖配置后未重新构建镜像、未使用新镜像创建新容器,旧镜像/旧容器内的依赖已经固化,不会随本地配置文件修改而更新。以下是三个问题的具体解答:
问题1:如何正确为我的应用添加依赖?
操作步骤如下:
- 每次修改
requirements.txt或Dockerfile后,先停止并删除旧容器、旧镜像,避免缓存导致的更新失效:
docker stop docker.test docker rm docker.test docker rmi docker.test
- 建议优化你的
Dockerfile配置,适配基础镜像的默认路径规则,避免路径不匹配导致的异常:
FROM tiangolo/uwsgi-nginx-flask:python3.8-alpine3.7 RUN apk --update add bash nano ENV STATIC_URL /static ENV STATIC_PATH /app/static # 先拷贝依赖清单,利用Docker缓存加速构建 COPY ./requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 再拷贝项目代码 COPY . .
- 重新执行
start.sh构建新镜像并启动新容器即可生效。
额外提示:你的启动脚本挂载了本地目录到容器的/app路径,容器运行时会使用本地当前目录的代码,需要确保本地代码和安装的依赖版本匹配。
问题2:为什么三个必备文件移入回收站后,重启Docker容器仍然可以正常运行?
Docker镜像的构建是一次性的打包过程,构建完成后,项目运行所需的所有依赖、代码、配置都已经固化在镜像文件中,和本地的原始构建文件(start.sh、Dockerfile、requirements.txt)没有任何关联。你删除的只是本地用于构建镜像的原材料,已经构建好的镜像和已经创建的容器内部文件不会受到任何影响,所以重启容器可以正常运行。
问题3:删除本地requirements.txt中的Flask声明再重启Docker,应用仍可正常运行是什么原因?
requirements.txt仅在docker build构建镜像阶段生效,作用是指导镜像安装对应的依赖包。依赖安装完成后就已经写入镜像的系统文件中,后续你修改、删除本地的requirements.txt,只要不重新执行docker build生成新镜像,镜像内已经安装好的Flask包不会发生任何变化。容器运行过程中不会读取本地的requirements.txt文件,所以不会对运行中的应用产生任何影响。
内容的提问来源于stack exchange,提问作者Faraz Ali Khan
相关产品推荐
相关产品推荐

