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

寻求Azure Service Bus Emulator可用的Docker Compose配置方案

问题排查与修复方案

从报错信息Name or service not known来看,核心问题是Service Bus模拟器容器无法解析SQL容器的DNS名称,结合你的配置,以下是具体排查和修复步骤:

1. 修正Config.json挂载路径(关键修复)

从模拟器日志里的Content root path: /ServiceBus_Emulator可以看出,模拟器的配置文件默认读取路径是容器的/ServiceBus_Emulator目录,而非你当前挂载的/app。修改docker-compose.yml中service-bus-emulator的volumes配置:

volumes:
  - ./config.json:/ServiceBus_Emulator/config.json:ro

2. 强化SQL容器的健康检查

Azure SQL Edge首次启动初始化时间较长,当前健康检查的重试次数和间隔可能不足以覆盖启动耗时,修改健康检查配置:

healthcheck:
  test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", "localhost", "-U", "sa", "-P", "YourStrong!Passw0rd", "-Q", "SELECT 1"]
  interval: 15s
  timeout: 10s
  retries: 10
  start_period: 30s  # 新增:启动后30秒再开始健康检查

3. 验证容器间网络连通性

手动进入Service Bus模拟器容器,测试能否访问SQL容器:

# 进入模拟器容器
docker exec -it az-service-bus-emulator /bin/bash

# 测试DNS解析
ping azure-sql-edge

# 测试端口连通性(容器内先安装telnet)
apt-get update && apt-get install -y telnet
telnet azure-sql-edge 1433

如果上述命令执行失败,检查Docker网络sbnet是否正常创建,或重启Docker服务后再试。

4. 替代方案:用环境变量传递连接字符串

避免挂载配置文件的路径问题,直接在docker-compose.yml中给service-bus-emulator添加环境变量:

environment:
  ACCEPT_EULA: "Y"
  ASPNETCORE_ENVIRONMENT: "Development"
  DOTNET_RUNNING_IN_CONTAINER: "true"
  Logging__LogLevel__Default: "Information"
  # 用.NET配置绑定规则传递SQL连接字符串
  SqlConfiguration__ConnectionString: "Server=tcp:azure-sql-edge,1433;User ID=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=true"

同时删除volumes中挂载config.json的配置项。

5. 确认SQL容器的远程连接配置

Azure SQL Edge默认允许远程连接,但可以进入SQL容器验证:

docker exec -it azure-sql-edge /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P YourStrong!Passw0rd -Q "EXEC sp_configure 'remote access'; RECONFIGURE;"

确保remote access的run_value为1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:50:09