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
相关产品推荐
相关产品推荐

