Sail - Docker - 2 seperate database containers
I'm trying to setup a seperate database for Laravel Telescope using Sail. In the docker-composer.yml file I added a second mysql container using another port (3307). The container and the database is working fine, using DataGrip I can access it with no problems.
Still Laravel will throw a QueryException when using the new database connection:
SQLSTATE[HY000] [2002] Connection refused
Seems like accessing the container from outside docker is working fine, while from inside the laravel-container there is some configuration missing.
Anyone encountered this as well and got a solution? Here are my docker-composer.yml, .env and config/database.php files.
docker-composer.yml
laravel.test:
....
mysql:
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
mysql_telescope:
image: 'mysql:8.0'
ports:
- '${DB_PORT_TELESCOPE}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD_TELESCOPE}'
MYSQL_DATABASE: '${DB_DATABASE_TELESCOPE}'
MYSQL_USER: '${DB_USERNAME_TELESCOPE}'
MYSQL_PASSWORD: '${DB_PASSWORD_TELESCOPE}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysqltelescope:/var/lib/mysql_telescope'
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
sailmysqltelescope:
driver: local
config/database.php
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'mysql_telescope' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST_TELESCOPE', '127.0.0.1'),
'port' => env('DB_PORT_TELESCOPE', '3306'),
'database' => env('DB_DATABASE_TELESCOPE', 'forge'),
'username' => env('DB_USERNAME_TELESCOPE', 'forge'),
'password' => env('DB_PASSWORD_TELESCOPE', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test_project
DB_USERNAME=sail
DB_PASSWORD=password
DB_CONNECTION_TELESCOPE=mysql_telescope
DB_HOST_TELESCOPE=mysql_telescope
DB_PORT_TELESCOPE=3307
DB_DATABASE_TELESCOPE=test_project_telescope
DB_USERNAME_TELESCOPE=sail
DB_PASSWORD_TELESCOPE=password
Please or to participate in this conversation.