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

