Docker化.NET 6 API无法连接SQL Server容器问题求助
解决ASP.NET Core 6 API容器无法连接SQL Server容器的问题
针对你遇到的API容器无法连接同docker-compose下SQL Server容器的问题,以下是几个关键排查和解决步骤:
1. 在连接字符串中添加证书信任参数
容器内的SQL Server默认使用自签名证书,.NET Core客户端默认会验证证书有效性,这会导致连接失败。修改docker-compose.yml中的连接字符串,添加TrustServerCertificate=True:
environment: - ConnectionStrings__UserDbConnection=Server=sqlserver;Database=UserDB;User=sa;Password=YourPassword123;TrustServerCertificate=True;
2. 验证目标数据库是否存在
API尝试连接的UserDB数据库可能并未在SQL Server容器中创建。进入SQL Server容器执行以下命令检查:
# 进入SQL Server容器 docker exec -it <sqlserver-container-id> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P YourPassword123 # 在sqlcmd中执行查看数据库列表 SELECT name FROM sys.databases; GO
如果UserDB不存在,你可以选择:
- 在API启动逻辑中添加EF Core迁移自动创建数据库(确保代码包含
context.Database.Migrate()逻辑) - 或者给SQL Server容器挂载初始化SQL脚本,容器启动时自动执行(将脚本放在本地目录,通过
volumes挂载到容器的/opt/mssql/scripts路径)
3. 确认API容器已正确加载环境变量
进入API容器,检查环境变量是否正确传入:
docker exec -it <userapi-container-id> printenv
查找ConnectionStrings__UserDbConnection是否存在且值正确。Linux容器中,.NET Core通过双下划线__解析层级配置,该格式是正确的,若未加载到变量,可检查docker-compose.yml的语法是否有误。
4. 测试容器间网络连通性
在API容器内测试与SQL Server容器的网络连通性:
# 进入API容器 docker exec -it <userapi-container-id> bash # 安装telnet(若容器未预装) apt-get update && apt-get install -y telnet # 测试1433端口连通性 telnet sqlserver 1433
如果telnet无法连接,可手动指定docker-compose网络来修复:
version: '1.0' networks: app-network: driver: bridge services: userapi: ... networks: - app-network ... sqlserver: ... networks: - app-network ...
5. 检查SQL Server容器的SA密码有效性
查看SQL Server容器日志,确认SA密码是否符合复杂度要求并被正常接受:
docker logs <sqlserver-container-id>
若日志中有密码相关错误,修改SA_PASSWORD为符合要求的密码(至少8位,包含大小写字母、数字、特殊字符)后重启容器。
内容的提问来源于stack exchange,提问作者Akhil RJ
相关产品推荐
相关产品推荐

