Laravel Sail项目MongoDB连接拒绝问题排查求助
Laravel Sail 连接 MongoDB 报错排查与修复
报错信息
No suitable servers found (
serverSelectionTryOnceset): [connection refused calling hello on 'mongodb:21017']
触发错误的代码:
try { $l = DB::connection('mongodb')->getMongoClient()->listDatabases(); dd($l); } catch (\Exception $e) { echo $e->getMessage(); }
当前环境配置
.env 文件配置
MONGO_DB_HOST=mongodb MONGO_DB_PORT=21017 MONGO_DB_DATABASE=test MONGO_DB_USERNAME=sail MONGO_DB_PASSWORD=password
docker-compose 配置
mongodb: image: mongo:4.4.6 ports: - '${FORWARD_MONGO_DB_PORT:-27017}:27017' environment: MONGO_INITDB_ROOT_USERNAME: '${MONGO_DB_USERNAME}' MONGO_INITDB_ROOT_PASSWORD: '${MONGO_DB_PASSWORD}' MONGO_INITDB_DATABASE: '${MONGO_DB_DATABASE}' volumes: - 'sail-mongodb:/data/db' networks: - sail
PHP 扩展状态
已在 PHP8.2 Dockerfile 中安装 MongoDB 扩展:
RUN pecl install mongodb
已验证项:
- 从 laravel.test 容器内 ping
mongodb容器成功,无丢包 - 可在 mongodb 容器内正常连接 mongo shell
问题根源
.env 中配置的 MONGO_DB_PORT=21017 错误。容器间通信使用的是容器内部监听端口,而非宿主机的转发端口。MongoDB 容器内部默认监听端口为 27017,你混淆了内部端口与外部转发端口。
修复步骤
- 修正 .env 端口配置
MONGO_DB_PORT=27017
- 重启 Sail 容器
./vendor/bin/sail down -v && ./vendor/bin/sail up -d
- 额外配置检查
确认config/database.php中 MongoDB 连接配置正确引用环境变量,且认证数据库设置正确:
'mongodb' => [ 'driver' => 'mongodb', 'host' => env('MONGO_DB_HOST', 'localhost'), 'port' => env('MONGO_DB_PORT', 27017), 'database' => env('MONGO_DB_DATABASE'), 'username' => env('MONGO_DB_USERNAME'), 'password' => env('MONGO_DB_PASSWORD'), 'options' => [ 'database' => 'admin' // root 用户认证需指定 admin 数据库 ] ],
若未安装 MongoDB 扩展包,需执行安装:
./vendor/bin/sail composer require jenssegers/mongodb
并在 config/app.php 中注册服务提供者:
'providers' => [ // ... Jenssegers\Mongodb\MongodbServiceProvider::class, ],
内容的提问来源于stack exchange,提问作者Beaam 666
相关产品推荐
相关产品推荐

