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

Testcontainers.net自定义容器与SQL Server容器通信故障排查

解决容器间SQL Server连接问题

问题原因

你怀疑的没错:GetConnectionString() 返回的是主机访问容器的地址(127.0.0.1 + 映射端口),但同一Docker网络内的容器需要通过容器名称和容器本身的端口(而非主机映射端口)通信。

解决方案步骤

1. 给SQL Server容器指定固定名称

在创建SQL容器时,添加WithName()方法设置可识别的容器名称,让自定义容器能通过该名称访问它:

_dbContainer = new MsSqlBuilder()
    .WithImage("mcr.microsoft.com/mssql/server:2022-latest")
    .WithPassword("Redacted")
    .WithNetwork(_network)
    .WithName("sql-server-container") // 指定容器名称
    .Build();

2. 构建容器间专用连接字符串

放弃使用GetConnectionString(),手动构建连接字符串:用SQL容器名称作为服务器地址,端口用默认的1433(容器内SQL服务原生运行端口,同一网络内可直接访问):

var interContainerConnString = $"Server=sql-server-container,1433;Database=master;User Id=sa;Password=Redacted;TrustServerCertificate=True;";

3. 传入新连接字符串到自定义容器

将上述连接字符串作为环境变量传给自定义容器:

ContainerInstance = new ContainerBuilder()
    .WithImage(_dockerImage)
    .WithEnvironment("Database", interContainerConnString)
    .WithNetwork(_network) // 确保自定义容器加入同一网络
    .Build();

额外注意事项

  • 确保自定义容器已加入目标Docker网络(你已通过WithNetwork(_network)配置,无需修改)。
  • SQL Server容器启动需要时间,建议在启动自定义容器前等待SQL容器就绪:
    await _dbContainer.WaitForContainerReadyAsync();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:07:44