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

Docker环境下NodeJS可访问MariaDB但Python报KeyError: 'timeout'问题

问题分析与解决方案

KeyError: 'timeout'错误的核心是代码尝试访问不存在的字典键'timeout',结合你的场景,NodeJS能正常连接但Python报错,原因和解决方向如下:

1. Python mariadb驱动的参数处理逻辑问题

不同语言的数据库驱动对参数的容错性不同:

  • NodeJS的mysql驱动连接MariaDB时,即使配置对象缺少timeout字段,会自动使用默认值,不会报错。
  • 部分版本的Python mariadb驱动会默认尝试读取timeout参数,如果你的配置字典sql_logs里没有这个键,就会抛出KeyError——哪怕你没在connect()里显式使用它。

解决办法:

  • 显式添加timeout参数到连接代码中:
cnxn = mariadb.connect(
    user=sql_logs["username"],
    password=sql_logs["password"],
    host=sql_logs["address"],
    port=sql_logs["port"],
    database=sql_logs["database"],
    timeout=30  # 按需设置超时时间,单位秒
)
  • 升级Python的mariadb驱动到最新稳定版:
pip install --upgrade mariadb

2. sql_logs字典的结构或取值问题

检查sql_logs字典的实际内容:

  • 确认是否在代码其他地方被修改,导致驱动底层逻辑误读该字典的'timeout'键。
  • 对比NodeJS的sql_security_logs,确认两者的配置参数是否一致(比如主机地址、端口是否正确)。

3. 排除Docker网络问题

既然NodeJS容器能正常连接,Docker网络配置(如网桥、端口映射)大概率没问题,但可以快速确认:

  • Python容器的网络模式是否和NodeJS一致(比如都是默认的bridge网络)。
  • Python容器能否ping通MariaDB容器的IP(进入Python容器执行ping <mariadb-container-ip>验证)。

内容的提问来源于stack exchange,提问作者Marius Magaud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:33:24