Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

diepaul's avatar

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
0 likes
0 replies

Please or to participate in this conversation.