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

集成测试中自定义引擎容器无法连接Azurite容器问题排查

问题分析与解决建议

针对自定义引擎容器无法连接Azurite容器的Connection refused错误,以下是具体原因排查和解决方法:

核心原因排查与修复

1. 连接字符串主机地址错误

Azurite容器的网络别名为azurite_server,但如果get_connection_string()返回的连接字符串中使用了localhost或宿主机IP,引擎容器在自身网络空间内访问localhost会指向自身,必然导致连接失败。

解决方法:
手动替换连接字符串中的主机地址为容器别名:

connection_string = azurite_container.get_connection_string().replace("localhost", "azurite_server")

最终连接字符串格式应为:

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite_server:10000/devstoreaccount1;QueueEndpoint=http://azurite_server:10001/devstoreaccount1;

2. Azurite未完全就绪就启动引擎

即使等待引擎日志,Azurite可能仍未完成初始化,此时引擎发起连接会被拒绝。

解决方法:
添加Azurite就绪检查逻辑:

import requests
import time

def wait_for_azurite(azurite_container):
    host = azurite_container.get_container_host_ip()
    port = azurite_container.get_exposed_port(10000)
    timeout = 60
    start = time.time()
    while time.time() - start < timeout:
        try:
            # 404表示服务已就绪(仅容器不存在)
            resp = requests.get(f"http://{host}:{port}/devstoreaccount1?restype=container")
            if resp.status_code == 404:
                return
        except requests.exceptions.ConnectionError:
            time.sleep(1)
    raise TimeoutError("Azurite初始化超时")

# 在启动引擎容器前调用
wait_for_azurite(azurite_container)

3. 端口暴露配置错误

代码中with_exposed_ports(10000, 10000)的写法重复了端口号,正确的端口暴露方式应为:

.with_exposed_ports(10000, 10001)

或分开调用:

.with_exposed_port(10000)
.with_exposed_port(10001)

错误的端口配置会导致引擎容器无法访问Azurite的Blob/Queue服务端口。

4. 引擎容器内SDK配置问题

  • 检查引擎代码是否正确读取blob_connection_string环境变量,避免硬编码localhost;
  • Azure SDK默认可能强制HTTPS,但Azurite默认仅支持HTTP,需确保SDK未设置require_https=True。

5. Docker网络解析问题

若上述方法无效,可验证网络别名是否生效:

# 在引擎容器内执行ping测试
result = container.exec_run("ping azurite_server -c 3")
print(result.output.decode())

若ping不通,需确认两个容器确实加入了同一网络,或直接使用Azurite容器名称替代别名。

调试辅助步骤

  • 打印最终传递给引擎的connection_string,确认主机地址为azurite_server;
  • 进入引擎容器手动执行curl http://azurite_server:10000/devstoreaccount1,验证连接;
  • 查看Azurite容器日志,确认服务正常启动:print(azurite_container.logs())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:17:17