I am trying to connect the MongoDB database to my project in Laravel 7.0 using Docker. I have followed this guide
Unfortunately, not everything goes as planned. I cannot run the command
php artisan migrate
because an error occurs
MongoDBDriverExceptionConnectionTimeoutException No suitable servers found (`serverSelectionTryOnce` set): [Invalid reply from server. calling ismaster on '127.0.0.1:50003'] at vendor/mongodb/mongodb/src/functions.php:431 427| // TODO: PHPLIB-476: Read transaction read preference once PHPC-1439 is implemented 428| $readPreference = new ReadPreference(ReadPreference::RP_PRIMARY); 429| } 430| > 431| return $manager->selectServer($readPreference); 432| } 433| +24 vendor frames 25 artisan:37 IlluminateFoundationConsoleKernel::handle()
The same error occurs when trying to connect to the database when using the registration or login options on the website.
My .env file
DB_CONNECTION=mongodb DB_HOST=localhost DB_PORT=50003 DB_DATABASE=dbname DB_USERNAME=username DB_PASSWORD=password
My database.php file
'mongodb' => [ 'driver' => 'mongodb', 'host' => env('DB_HOST', 'localhost'), 'port' => 50003, 'database' => env('DB_DATABASE', 'dbname'), 'username' => env('DB_USERNAME', 'username'), 'password' => env('DB_PASSWORD', 'password'), 'options' => [ // here you can pass more settings to the Mongo Driver Manager // see https://www.php.net/manual/en/mongodb-driver-manager.construct.php under "Uri Options" for a list of complete parameters that you can use 'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'), // required with Mongo 3+ ], ],
My User.php file
namespace App; use IlluminateNotificationsNotifiable; use JenssegersMongodbEloquentModel as Eloquent; use IlluminateAuthAuthenticatable as AuthenticableTrait; use IlluminateAuthPasswordsCanResetPassword; use IlluminateContractsAuthAuthenticatable as AuthenticatableContract; use IlluminateContractsAuthCanResetPassword as CanResetPasswordContract; class User extends Eloquent implements AuthenticatableContract, CanResetPasswordContract { use AuthenticableTrait; use Notifiable; use CanResetPassword; protected $connection = 'mongodb'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; ...
My docker-compose.yml file
version: '3.1' services: mongo: image: mongo restart: always container_name: Mongo_DB environment: MONGO_INITDB_ROOT_USERNAME: username MONGO_INITDB_ROOT_PASSWORD: password ports: - '27018:27017' mongo-express: image: mongo-express restart: always container_name: Mongo_Express ports: - 50003:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: username ME_CONFIG_MONGODB_ADMINPASSWORD: password
EDIT: when I changed the port in the .env and database.php file to 27017 and deleted DB_USERNAME and DB_PASSWORD in the .env file, and in the database.php file I left a blank space between ” where you had to enter your username and password, I started to connect.
Now the problem is that when I want to enter 127.0.0.1: 27017 I have this message
It looks like you are trying to access MongoDB over HTTP on the native driver port.
What’s wrong?
Advertisement
Answer
Answer:
Port in .env & database.php must be 27018 not 50003