Try to check config('database.connections.mysql') to be sure that the configuration is fine.
Jan 17, 2024
2
Level 1
SQLSTATE[HY000] [2002] Connection refused
Hi, I have read all topics related to this problem already. Nothing helped.
So, I am getting this error trying to fetch any of my api endpoints:
[2024-01-17 17:04:23] local.ERROR: SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from `oauth_clients` where `id` = 2 limit 1) {"exception":"[object] (Illuminate\Database\QueryException(code: 2002): SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from `oauth_clients` where `id` = 2 limit 1) at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php:801)
I use sail. Here is my docker-compose.yml:
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.2
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.2/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
volumes:
- '.:/var/www/html'
networks:
- sail
visits-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:
- 'visits-mysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}" ]
retries: 3
timeout: 5s
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
visits-mysql:
driver: local
sailredis:
driver: local
.env db related lines:
DB_CONNECTION=mysql
DB_HOST=visits-mysql
DB_PORT=3306
DB_DATABASE=visits_api
DB_USERNAME=root
DB_PASSWORD=
I can connect from laravel.test container to mysql container using mysql -u root -h visits-mysql
Moreover I made a command to test connection:
public function handle()
{
dd(DB::select('select * from `oauth_clients` where `id` = 2 limit 1'));
}
# php artisan app:test-db
array:1 [ // app/Console/Commands/TestDbConnection.php:29
0 => {#1838
+"id": 2
+"user_id": null
+"name": "VisitsAPI Password Grant Client"
+"secret": "hxsgXWM8AvPWrVOLOe2RBes8UXCECte1xVcMixL6"
+"provider": "users"
+"redirect": "http://localhost"
+"personal_access_client": 0
+"password_client": 1
+"revoked": 0
+"created_at": "2024-01-17 16:28:10"
+"updated_at": "2024-01-17 16:28:10"
}
]
Any ideas highly appreciated.
Level 1
For those whom it can help in the future: I fixed it via using third party image. Idk what's wrong with sail runtime image, don't have time to figure it out.
docker-compose.yml
version: '3'
services:
web:
image: docker.io/bitnami/laravel:10
ports:
- '80:8000'
environment:
DB_HOST: '${DB_HOST}'
DB_PORT: '${DB_PORT}'
DB_USERNAME: '${DB_USERNAME}'
DB_DATABASE: '${DB_DATABASE}'
REDIS_HOST: '${REDIS_HOST}'
REDIS_PASSWORD: '${REDIS_PASSWORD}'
REDIS_PORT: '${REDIS_PORT}'
volumes:
- '.:/app'
- '/app/.git'
networks:
- sail
depends_on:
- mysql
- redis
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:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}" ]
retries: 3
timeout: 5s
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
sailredis:
driver: local
Please or to participate in this conversation.