Laravel Docker MySQL Connection Refused
When using Laravel with Docker and encountering a “connection refused” error for MySQL, there are a few common causes and solutions to consider.
1. Check MySQL Container Configuration
Make sure your MySQL container is correctly configured and running. Check the container logs for any relevant error messages. Verify the container is listening on the correct port and that the MySQL server is running.
2. Verify MySQL Connection Settings
Ensure that the correct MySQL connection settings are provided in your Laravel project’s .env
file. These settings should match the configuration of your MySQL container, including the DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, and DB_PASSWORD
.
For example:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=secret
3. Verify Docker Network Connectivity
Ensure that your Laravel project’s Docker container is connected to the same Docker network as the MySQL container. Networking issues can often cause connection refused errors.
You can check your Docker networks using the command docker network ls
. If your Laravel and MySQL containers are not in the same network, you can create a network and connect your containers to it using the docker network create
and docker network connect
commands.
4. Verify Database Seed or Migration
If you are running database seeders or migrations, ensure that they are executed within the Laravel container, not the MySQL container. The Laravel container should have the necessary permissions and environment configurations to connect to the MySQL container.
5. Restart Containers
Sometimes restarting the Docker containers can resolve connection issues. Use the docker-compose down
command to stop and remove containers, and then bring them back up using docker-compose up
.
Example Docker Compose Configuration
Here’s an example of a simplified Docker Compose configuration for Laravel with MySQL:
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- 8000:80
volumes:
- .:/var/www/html
networks:
- laravel-network
mysql:
image: mysql:8.0
environment:
MYSQL_DATABASE: my_database
MYSQL_ROOT_PASSWORD: secret
networks:
- laravel-network
networks:
laravel-network:
Ensure that your Laravel project’s docker-compose.yml
file includes both the web and mysql services, and that their configurations match your environment.
Note:
This answer assumes you are using Docker Compose and have a basic understanding of Laravel, MySQL, and Docker. If you are still having trouble, please provide more specific details about your setup, configuration, and any error messages you are encountering for further assistance.