Docker Nginx负载均衡应用崩溃,Flask手动运行遇Jinja2导入错误
解决Docker容器中Flask应用的
ImportError: cannot import name 'escape' from 'jinja2'问题 问题根源是Jinja2 3.0+版本移除了escape的直接导出,而Docker容器默认安装的Jinja2版本与本地兼容版本不一致,导致报错。以下是三种可行解决方案:
方案1:固定兼容的Jinja2版本
在requirements.txt中明确指定低于3.0的Jinja2版本,与Flask 2.1.0匹配:
Flask==2.1.0 Jinja2==2.11.3
修改后重新构建Docker镜像,确保依赖安装正确。
方案2:修改代码中的导入语句
如果不想降低Jinja2版本,找到应用代码中从jinja2导入escape的行,替换为从markupsafe导入(Flask 2.x已默认依赖该包):
# 替换前 from jinja2 import escape # 替换后 from markupsafe import escape
方案3:清理Docker构建缓存
若之前构建过镜像,Docker可能缓存了旧依赖,需强制重新构建:
docker-compose build --no-cache
本地运行正常是因为本地环境的Jinja2版本为兼容版,而Docker容器会自动拉取最新依赖版本,导致API不兼容。上述方案任选其一即可解决容器崩溃和Nginx 502问题。
内容的提问来源于stack exchange,提问作者SamAndrew81
相关产品推荐
相关产品推荐

