如何连接Docker本地SQL Server数据库测试异步查询方法
Docker中SQL Server的连接字符串配置及测试代码修正
一、连接字符串格式说明
Docker运行SQL Server时,连接字符串需要匹配容器配置,核心参数如下:
- 主机与端口:本地运行Docker的话,用
localhost加映射的端口(默认SQL Server容器内部端口是1433,如果你启动时用-p 14330:1433映射到主机14330端口,就写localhost,14330)。 - 认证信息:SQL Server默认用SQL认证,账号是
sa,密码是你启动容器时通过SA_PASSWORD环境变量设置的(必须符合复杂度要求,比如包含大小写、数字、特殊字符)。 - 数据库名:替换成你实际创建的测试数据库名称,比如
GamesDb。 - 证书信任:本地测试加上
TrustServerCertificate=True,跳过证书验证(生产环境禁用)。
标准连接字符串示例:
Server=localhost,1433;Database=GamesDb;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=True;
如果是用Docker Compose部署,服务名设为sqlserver的话,连接字符串可直接用服务名当主机:
Server=sqlserver,1433;Database=GamesDb;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=True;
二、测试项目配置步骤
- 在测试项目的
appsettings.json中添加连接字符串:
{ "ConnectionStrings": { "GamesDbContext": "Server=localhost,1433;Database=GamesDb;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=True;" } }
- 修正测试代码中的语法问题:
原代码存在几处小错误,修正后如下:
public async Task Get_GamesByName() { var options = new DbContextOptionsBuilder<GamesDbContext>() .UseSqlServer(Configuration.GetConnectionString("GamesDbContext")) .Options; using (var context = new GamesDbContext(options)) { GamesRepository gamesRepository = new GamesRepository(context); var result = await gamesRepository.GetGamesByNameAsync("Witcher"); Assert.Equal(2, result.Count); } }
错误说明:
DbContextOptionsBuilder的Options属性首字母需大写,原代码调用顺序错误。- 变量名
option需统一为options。 result.count要改为result.Count,C#属性遵循帕斯卡命名法。
三、连接问题排查要点
- 确认Docker容器处于运行状态,用
docker ps查看端口映射是否正确。 - 检查测试数据库是否已创建并填充测试数据。
- 若连接失败,排查主机防火墙是否允许访问映射端口,或Docker容器网络配置是否正常。
内容的提问来源于stack exchange,提问作者LowKeyLo
相关产品推荐
相关产品推荐

