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

Ubuntu Python脚本访问Windows Cosmos DB模拟器报错求助

排查Ubuntu访问Azure Cosmos DB模拟器时find_collection的模糊错误

首先,我注意到你已经解决了SSL证书验证的问题,但现在遇到了一个非常模糊的顶层错误。这种无具体信息的报错通常是因为异常未被正确捕获输出,或是基础的连接/资源存在性出了问题。我们一步步来拆解排查:

1. 先确认核心资源与配置的正确性

  • 你注释掉了client.CreateDatabase({"id": DATABASE_ID}),所以必须确保Windows模拟器中已经手动创建了DATABASE_ID对应的数据库,且COLLECTION_ID的集合也存在于该数据库内。如果数据库不存在,QueryCollections调用会直接失败,但当前的异常处理没有输出足够细节。
  • 检查你的config.py配置项:
    • HOST必须填写Windows机器的实际IP(比如http://192.168.x.x:8081),不能用localhost(因为Ubuntu是独立机器,无法通过localhost访问Windows模拟器)。
    • MASTER_KEY要和Windows模拟器的主密钥完全一致(可以在模拟器的「密钥」页面复制)。
    • 确保Windows模拟器已经开启远程访问权限:打开模拟器设置,勾选「允许来自远程机器的连接」,同时Windows防火墙要开放8081端口。

2. 增强异常捕获,获取完整错误信息

当前的顶层异常只打印了args和message,但pydocumentdb的错误包含状态码、错误详情等关键信息。修改代码添加traceback打印,就能看到具体出错行和完整错误栈:

import traceback  # 导入traceback模块

if __name__ == '__main__':
    try:
        run_sample()
    except Exception as e:
        print("Top level Error: args:{0}, message:{1}".format(e.args,e.message))
        # 添加完整错误栈打印
        print("\n完整错误详情:")
        traceback.print_exc()

同时,在run_sample的HTTPFailure捕获中,补充更多错误细节:

except errors.HTTPFailure as e:
    print('\nrun_sample捕获到错误:状态码 {0},错误信息 {1}'.format(e.status_code, e.message))

3. 验证模拟器的远程连接是否正常

在Ubuntu机器上,先用curl测试连接模拟器的数据库,确认网络和权限没问题:

curl -k https://<windows-ip>:8081/dbs/<DATABASE_ID> -H "Authorization: type=master&ver=1.0&sig=<MASTER_KEY>"

如果返回数据库的JSON结构,说明连接正常;如果报错,根据curl的提示排查网络或权限问题。

4. 检查pydocumentdb版本兼容性

旧版本的pydocumentdb可能和最新的Cosmos DB模拟器不兼容,尝试更新到最新版本:

pip install --upgrade pydocumentdb

5. 临时测试:跳过证书验证(仅用于排查)

虽然你已经导入了证书,但可以临时跳过验证来确认是否还有证书相关的潜在问题(注意:生产环境绝对不要这么做):
修改DocumentClient的初始化代码,添加自定义连接策略:

from pydocumentdb.connection_policy import ConnectionPolicy
from pydocumentdb.https_connection import HttpsConnection

# 自定义连接策略,跳过证书验证
connection_policy = ConnectionPolicy()
connection_policy.SSLConfiguration = HttpsConnection(verify=False)

with IDisposable(document_client.DocumentClient(HOST, {'masterKey': MASTER_KEY}, connection_policy=connection_policy )) as client:
    # 后续代码保持不变

如果跳过验证后错误消失,说明证书导入过程可能有问题,比如证书格式不正确(确保导出的是PEM格式,复制到Ubuntu后没有损坏)。


按照这些步骤排查,应该能快速定位问题根源。最常见的情况是:Windows模拟器未开启远程访问、配置文件中的HOST/密钥错误,或是目标数据库/集合不存在。

内容的提问来源于stack exchange,提问作者Nayan Goswami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:48:50