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 saPassword123即可尝试连接。 - 验证容器运行状态:
- 检查容器是否正常运行:
docker ps,确保状态为Up。 - 查看容器启动日志排查异常:
docker logs sql,确认SQL Server服务已成功启动,无密码合规性等错误。
- 检查容器是否正常运行:
- 排查端口拦截问题:
- 检查Mac防火墙是否拦截1433端口,可临时关闭防火墙测试。
- 若端口冲突,修改容器启动命令更换映射端口,例如:
之后用docker run --name sql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password123' -p 1434:1433 -d mcr.microsoft.com/azure-sql-edgesqlcmd -S tcp:localhost,1434 -U sa连接。
问题二:PHP调用sqlsrv_connect提示未定义函数
问题描述
PHP代码中调用sqlsrv_connect时触发致命错误,提示函数未定义。
解决步骤
- 安装并启用sqlsrv扩展:
- 确认PHP版本:运行
php -v获取版本信息(需匹配扩展的版本要求)。 - 通过PECL安装扩展(需确保已安装pecl环境):
pecl install sqlsrv pdo_sqlsrv - 编辑PHP配置文件
php.ini,添加以下两行(路径可通过php --ini查找):extension=sqlsrv.so extension=pdo_sqlsrv.so - 重启PHP服务(如Apache、PHP-FPM),运行
php -m检查输出中是否包含sqlsrv和pdo_sqlsrv。
- 确认PHP版本:运行
- 修正PHP连接地址:
将代码中的$serverName改为"localhost,1433"(若使用自定义映射端口则替换为对应端口),无需使用容器内部IP:$serverName = "localhost,1433";
内容的提问来源于stack exchange,提问作者swaziland
相关产品推荐
相关产品推荐

