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

Mac上Docker容器中SQL Server连接问题:sqlcmd超时及PHP函数未定义

解决Mac上Docker Azure SQL Edge的两个连接问题

问题一:sqlcmd连接容器SQL Server出现I/O超时

问题描述

已通过端口映射启动SQL Edge容器,但使用容器内部IP 172.17.0.2 连接时触发I/O超时错误。

解决步骤

  • 优先使用主机localhost而非容器IP:Mac的Docker网络架构下,已映射的端口直接通过localhost访问即可,无需使用容器内部IP。修改连接命令为:
    sqlcmd -S tcp:localhost,1433 -U sa
    
    输入密码Password123即可尝试连接。
  • 验证容器运行状态:
    1. 检查容器是否正常运行:docker ps,确保状态为Up。
    2. 查看容器启动日志排查异常:docker logs sql,确认SQL Server服务已成功启动,无密码合规性等错误。
  • 排查端口拦截问题:
    1. 检查Mac防火墙是否拦截1433端口,可临时关闭防火墙测试。
    2. 若端口冲突,修改容器启动命令更换映射端口,例如:
      docker run --name sql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password123' -p 1434:1433 -d mcr.microsoft.com/azure-sql-edge
      
      之后用sqlcmd -S tcp:localhost,1434 -U sa连接。

问题二:PHP调用sqlsrv_connect提示未定义函数

问题描述

PHP代码中调用sqlsrv_connect时触发致命错误,提示函数未定义。

解决步骤

  • 安装并启用sqlsrv扩展:
    1. 确认PHP版本:运行php -v获取版本信息(需匹配扩展的版本要求)。
    2. 通过PECL安装扩展(需确保已安装pecl环境):
      pecl install sqlsrv pdo_sqlsrv
      
    3. 编辑PHP配置文件php.ini,添加以下两行(路径可通过php --ini查找):
      extension=sqlsrv.so
      extension=pdo_sqlsrv.so
      
    4. 重启PHP服务(如Apache、PHP-FPM),运行php -m检查输出中是否包含sqlsrv和pdo_sqlsrv。
  • 修正PHP连接地址:
    将代码中的$serverName改为"localhost,1433"(若使用自定义映射端口则替换为对应端口),无需使用容器内部IP:
    $serverName = "localhost,1433";
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:17:31