Laravel Sail配置容器化MS SQL Server连接失败求助
Laravel Sail 连接MS SQL Server 故障排查方案
1. 确认容器网络一致性
Laravel Sail默认使用sail专属网络,你的MS SQL容器必须加入这个网络才能和Sail容器通信:
- 检查MS SQL容器的网络归属:
docker inspect sql1 | grep Networks - 若不在
sail网络,手动添加:docker network connect sail sql1 - 之后
.env里的DB_HOST直接写容器名sql1即可,不要用127.0.0.1/0.0.0.0(这两个是宿主机地址,容器间通信无需绕宿主机)
2. 排查MS SQL容器自身状态
- 先确认容器正常启动:
docker logs sql1,重点看是否有密码不符合复杂度、服务启动失败这类报错(MS SQL默认要求强密码) - 进入容器测试本地连接:
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 你的密码,如果连不上,说明容器内的SQL服务本身有问题,先解决这个
3. 端口绑定问题处理
你绑定1433端口时提示占用,说明宿主机已有其他程序(比如本地装的SQL Server)占用该端口:
- 容器间通信不需要映射宿主机端口,直接去掉
docker-compose.yaml里的1433端口映射配置即可 - 如果非要映射给宿主机用,换个端口比如
1434:1433,但容器间通信依然用容器名sql1,不用改DB_PORT
4. 验证Sail容器内的驱动安装
自定义Dockerfile添加驱动后,必须重新构建镜像确保驱动生效:
- 执行
sail build --no-cache,避免缓存导致驱动没装上 - 进入Sail容器检查驱动:
sail bash,然后运行php -m | grep sqlsrv,确认输出里有sqlsrv和pdo_sqlsrv两个模块
5. .env配置细节核对
确保SQL Server相关配置完全匹配:
DB_CONNECTION=sqlsrv DB_HOST=sql1 DB_PORT=1433 DB_DATABASE=你的数据库名 DB_USERNAME=sa DB_PASSWORD=你的强密码
- 密码必须和MS SQL容器启动时的
SA_PASSWORD完全一致,注意不要有空格或转义错误 - 目标数据库要提前在MS SQL里创建好,或者确保SA用户有创建数据库的权限
内容的提问来源于stack exchange,提问作者Finchy70
相关产品推荐
相关产品推荐

