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

Docker容器内SQL Server可被同网应用连接但本地无法接入求助

解决Docker化SQL Server本地无法连接的问题

核心问题

你在本地使用my-shop-db作为SQL Server服务器名是无效的——这个名称是Docker自定义网络my-network内的服务别名,仅同一网络里的容器(比如你的my-service)能识别,本地机器无法解析这个主机名。

分步解决方案

  • 修改本地连接的服务器地址
    本地连接时,使用localhost或你的本地IP地址(比如192.168.x.x)替代my-shop-db,端口保持1433。示例连接字符串:

    "Server=localhost,1433;Initial Catalog=MyShopDb;User ID=sa;Password=Secure-Password;"
    

    如果本地1433端口被其他程序占用,可修改Docker Compose里的端口映射(比如改成"1434:1433"),然后本地连接时用localhost,1434。

  • 验证容器端口监听状态

    1. 查看容器是否正常运行:
      docker ps
      
      确认my-shop-db容器状态为Up。
    2. 进入容器检查SQL Server是否监听1433端口:
      docker exec -it my-shop-db netstat -an
      
      确认输出里有0.0.0.0:1433或:::1433的监听记录。
  • 检查本地防火墙设置
    确保本地防火墙允许1433端口的入站连接:

    • Windows:打开「Windows Defender防火墙」→「高级设置」→添加入站规则,允许TCP 1433端口。
    • Linux/macOS:使用ufw allow 1433/tcp(Ubuntu/Debian)或对应防火墙命令开放端口。
  • 验证SQL Server远程连接配置
    官方MSSQL镜像默认允许远程连接,但可手动确认:

    1. 进入容器执行SQL命令:
      docker exec -it my-shop-db /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "Secure-Password"
      
    2. 运行以下查询检查远程访问配置:
      EXEC sp_configure 'remote access';
      GO
      RECONFIGURE;
      GO
      
      确保run_value列的值为1(表示允许远程连接)。
  • 排查本地端口占用
    检查本地1433端口是否被其他程序占用:

    # Windows
    netstat -ano | findstr :1433
    # Linux/macOS
    lsof -i :1433
    

    如果有其他进程占用,可停止该进程,或修改Docker Compose的端口映射为其他未被占用的端口(比如1434:1433)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:48:26