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

从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服务可用再启动:

  1. 给wait-for.sh添加可执行权限:
    chmod +x ./etc/wait-for.sh
    
  2. 修改API服务的启动命令,在启动应用前执行等待脚本:
    serviceapi:
        # ... 其他配置保持不变 ...
        command: ["./wait-for.sh", "db-server:1433", "--", "dotnet", "ServiceAPI.dll"]
    
    (若你的API是自包含部署,替换为对应启动命令即可)

各错误原因说明

  • 容器名引发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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:02:18