从Docker容器通过C#连接SQL Server Docker容器失败求助
问题分析与解决方案
核心问题定位
你的连接字符串存在致命配置冲突:同时指定了User=sa;Password=mypassword(SQL Server身份验证)和Trusted_Connection=true(Windows身份验证),这会强制驱动优先使用Windows认证,引发一系列非预期错误(包括无关的Kerberos报错)。此外,容器内的API使用localhost/0.0.0.0作为服务器地址,不符合Docker网络的访问逻辑。
步骤1:修正连接字符串
删除Trusted_Connection=true(或显式设为false),并将服务器地址改为Docker Compose中定义的SQL服务名db-server(同一Docker网络内可直接通过服务名访问):
"ConnectionStrings": { "DefaultConnection": "Server=db-server,1433;Database=newDBName;User=sa;Password=mypassword;TrustServerCertificate=True;Encrypt=false;" }
步骤2:确保SQL服务就绪后再启动API
depends_on仅保证db-server容器启动,不保证SQL Server服务完全就绪。需要让API等待SQL服务可用再启动:
- 给
wait-for.sh添加可执行权限:chmod +x ./etc/wait-for.sh - 修改API服务的启动命令,在启动应用前执行等待脚本:
(若你的API是自包含部署,替换为对应启动命令即可)serviceapi: # ... 其他配置保持不变 ... command: ["./wait-for.sh", "db-server:1433", "--", "dotnet", "ServiceAPI.dll"]
各错误原因说明
- 容器名引发Kerberos错误:
Trusted_Connection=true强制启用Windows认证,驱动尝试通过Kerberos验证,但容器内无Kerberos环境,因此报错。 - localhost导致SQL 40错误:API运行在容器内,
localhost指向容器自身而非宿主机,无法访问宿主机映射的SQL端口。 - 0.0.0.0导致SQL 44错误:
0.0.0.0是监听地址(表示监听所有网卡),不是有效的连接目标地址,自然无法建立连接。
内容的提问来源于stack exchange,提问作者damcardoso
相关产品推荐
相关产品推荐

