Docker部署的Yii2 PHP项目无法连接Windows本地MongoDB报错如何解决
报错翻译
未找到匹配的服务器(已配置
serverSelectionTryOnce参数):[向'127.0.0.1:27017'发起hello请求时连接被拒绝]
根因说明
Docker容器内部的127.0.0.1指向的是容器本身,而非部署MongoDB的Windows宿主机,因此容器内的Yii2/PHP服务无法通过该地址访问宿主机的数据库。
解决步骤
- 第一步:修改MongoDB监听配置
- 关闭Windows本地的MongoDB服务
- 打开MongoDB配置文件
mongod.cfg,默认路径为C:\Program Files\MongoDB\Server\<版本号>\bin\mongod.cfg - 将
net.bindIp配置项从默认的127.0.0.1修改为0.0.0.0,生产环境可替换为Docker虚拟网卡的IP段以提升安全性 - 保存配置后重启MongoDB服务,验证本地连接正常
- 第二步:修改Yii2数据库连接配置
- 找到Yii2项目中MongoDB组件的配置文件,通常为
config/db.php或config/web.php - 将原连接地址
127.0.0.1替换为host.docker.internal,该地址是Docker Desktop for Windows默认提供的宿主机访问别名 - 若别名不生效,可在Windows cmd执行
ipconfig,查询Docker对应的虚拟网卡(一般名为vEthernet (WSL))的IPv4地址,填入连接配置
- 找到Yii2项目中MongoDB组件的配置文件,通常为
- 第三步:放行Windows防火墙端口
- 打开Windows Defender防火墙高级设置,新建入站规则
- 规则类型选择「端口」,协议选择TCP,特定本地端口填入
27017 - 选择「允许连接」,按需勾选适用的网络类型,设置规则名称后保存
- 第四步:验证连接有效性
进入PHP业务对应的Docker容器内部,执行curl host.docker.internal:27017,若返回It looks like you are trying to access MongoDB over HTTP on the native driver port.内容,说明网络连通正常,重启Yii2服务即可恢复数据库连接。
内容的提问来源于stack exchange,提问作者user16631620
相关产品推荐
相关产品推荐


