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

Flask Docker应用部署报TypeError,请求排查Werkzeug版本兼容问题

Flask + Werkzeug 3.0.0 兼容性报错解决方法

问题背景

基于Docker的Flask Web应用,使用相同Dockerfile和requirements.txt重新构建后出现报错,此前运行正常。当前环境为Python 3.12.0,Werkzeug版本3.0.0,报错核心为字符串正则匹配字节对象的类型错误。

报错堆栈

Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 2213, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 2193, in wsgi_app
    response = self.handle_exception(e)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1487, in full_dispatch_request
    return self.finalize_request(rv)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1508, in finalize_request
    response = self.process_response(response)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 2005, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "/usr/local/lib/python3.12/site-packages/flask_session/sessions.py", line 454, in save_session
    response.set_cookie(app.config["SESSION_COOKIE_NAME"], session_id,
  File "/usr/local/lib/python3.12/site-packages/werkzeug/sansio/response.py", line 224, in set_cookie
    dump_cookie(
  File "/usr/local/lib/python3.12/site-packages/werkzeug/http.py", line 1303, in dump_cookie
    if not _cookie_no_quote_re.fullmatch(value):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: cannot use a string pattern on a bytes-like object

解决方法

方法1:锁定Werkzeug版本到2.x

Werkzeug 3.0.0对Cookie值的类型校验更严格,而旧版flask-session未适配该变化。在requirements.txt中添加版本限制:

Werkzeug<3.0

重新构建Docker镜像,确保安装的Werkzeug为2.x系列版本。

方法2:升级flask-session到兼容版本

检查并升级flask-session至支持Werkzeug 3.0+的最新版本:

pip install --upgrade flask-session

更新requirements.txt中的flask-session版本,再重新构建镜像。

方法3:临时代码修复(不推荐)

若无法修改依赖版本,可临时修改flask_session/sessions.py的save_session方法,将session_id转为字符串类型:
找到调用response.set_cookie的行,将session_id改为str(session_id)。但此方法仅临时生效,下次构建镜像会被覆盖,优先使用前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:07:02