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

如何通过Docker Compose让Linux容器连接远程SQL Server

解决Linux容器中.NET Core应用无法连接远程SQL Server的问题

以下是逐步排查和解决的思路:

1. 先确认宿主机与SQL Server的连通性

  • 在宿主机上执行ping 192.168.100.186,验证基础网络是否可达
  • 测试SQL Server默认端口1433:telnet 192.168.100.186 1433 或 nc -zv 192.168.100.186 1433
    • 如果宿主机都无法连通,问题不在Docker,优先排查SQL Server所在机器的网络、防火墙配置

2. 验证容器内网络配置

  • 进入容器终端:docker exec -it tdi.translator.translationmanager bash
  • 检查extra_hosts是否生效:cat /etc/hosts,确认存在DATABASE_SERVER_NAME:192.168.100.186的条目
  • 在容器内ping宿主机网关(可通过ip route查看,通常是172.17.0.1),确认容器自身网络正常
  • 若容器内ping不通SQL Server IP,可尝试调整Docker网络模式:
    • 在docker-compose中添加network_mode: host,让容器直接使用宿主机网络(注意此时不需要ports映射,容器与宿主机共享网络栈)
    • 检查Docker bridge网络的iptables规则,确认没有阻止容器访问外部IP

3. 检查SQL Server的远程访问配置

  • 确认SQL Server已启用TCP/IP协议:在SQL Server配置管理器中,打开SQL Server网络配置,启用TCP/IP,并设置监听IP为0.0.0.0(允许所有IP访问)
  • 检查SQL Server所在机器的防火墙:开放1433端口,并允许容器所在的Docker子网(默认是172.17.0.0/16)访问
  • 确认SQL Server登录账号允许远程连接,且账号密码正确(可在SSMS中检查用户的登录属性)

4. 验证应用连接字符串

  • 确保连接字符串中指定的服务器名(DATABASE_SERVER_NAME)或IP、端口与实际一致,例如:
    Server=DATABASE_SERVER_NAME,1433;Database=YourDatabase;User Id=YourUser;Password=YourPass;TrustServerCertificate=True;
    
    • 若SQL Server使用非默认端口,必须在连接字符串中明确指定
    • 若使用自签SSL证书,需添加TrustServerCertificate=True避免证书验证失败

额外注意点

  • 你的docker-compose中ports映射为5102:5102,但Dockerfile和Kestrel配置中应用监听的是80端口,存在端口不匹配问题,建议修改为ports: - 5102:80,确保外部访问端口正确映射到容器内应用端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:33:27