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

NotSteve's avatar

Laravel App using Docker not able to connect to MySQL Server

I am using Docker to build my application.

I've been using sqlite recently, but I want to move on to MySQL. The issue that I am having is that my application cannot connect to the local MySQL server. I keep getting this response:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

I have checked my files, and I am sure that I have my .env and config/database.php file directing to my MySQL server in Docker. I managed to migrate my migration files, and even saw that table and its content was created using phpmyadmin. Not so sure what to do next, I've been searching the internet, and its telling me changing the DB_HOST to either 'db' or 'mysql' but nothing has worked.

Below are snippets of my .env, database.php, and docker-composer.yml files.

.env File

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_table_name
DB_USERNAME=root
DB_PASSWORD=

database.php

'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
			'mysql' => [
            		'driver' => 'mysql',
            		'url' => env('DATABASE_URL'),
            		'host' => env('DB_HOST', '127.0.0.1'),
            		'port' => env('DB_PORT', '3306'),
          			'database' => env('DB_DATABASE', 'database_name'),
           			'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'),
            ]) : [],
        ],
...

docker-compose.yml

services:
...
mysql:
        image: 'mysql/mysql-server:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: "%"
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
        volumes:
            - 'sail-mysql:/var/lib/mysql'
            - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
            retries: 3
            timeout: 5s
0 likes
2 replies
NotSteve's avatar

Sorry, the DB_DATABASE should be

DB_DATABASE=database_name

and the 'username' in database.php should be

'username' => env('DB_USERNAME, 'root'),'
NotSteve's avatar
NotSteve
OP
Best Answer
Level 1

I found the issue. The DB_HOST should be mysql instead of '127.0.0.1'

DB_HOST=mysql
1 like

Please or to participate in this conversation.