Reputation: 7715
I'm running Laravel 5.4 in Docker. This is my docker-compose.yml
file:
version: '2'
services:
app:
container_name: laravel_app
image: webdevops/php-apache-dev:ubuntu-16.04
links:
- mysql
depends_on:
- mysql
ports:
- 8888:80
volumes:
- .:/app
environment:
docker: 'true'
WEB_DOCUMENT_ROOT: '/app/public'
WEB_NO_CACHE_PATTERN: '\.(.*)$$'
working_dir: '/app'
mysql:
image: mariadb:latest
ports:
- 8889:80
environment:
MYSQL_ROOT_PASSWORD: 'dev'
MYSQL_DATABASE: 'dev'
MYSQL_USER: 'dev'
MYSQL_PASSWORD: 'dev'
This is the relevant part of my .env
file:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=8889
DB_DATABASE=dev
DB_USERNAME=dev
DB_PASSWORD=dev
I am able to see the Laravel welcome page - that side of things works. But when I run php artisan migrate
I get this error:
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = dev and table_name = migrations)
I have tried fiddling with the host
and port
parameters in the .env
file.
Upvotes: 18
Views: 34719
Reputation: 3496
I did try to set container name in env file, it works great in http requests, but in console I had issue for resolving container name(in my case its mysql
)
I added container name and point it to 127.0.0.1
in windows host file
127.0.0.1 mysql
Upvotes: 0
Reputation: 4651
this worked for me: put the name of my mysql container instead of 127.0.0.1
NAME CONTAINERS
project-db --> container mysql
project-app --> container laravel
DB_CONNECTION=mysql
DB_HOST=project-db
DB_PORT=3306
DB_DATABASE=project
DB_USERNAME=root
DB_PASSWORD=root
Upvotes: 50
Reputation: 520
After 5 hours researching I found this quote in comments:
Remove port-exposing, mariadb:latest sets it in its Dockerfile: This image exposes the standard MySQL port (3306)...
This mean you MUST use port 3306 in .env
of each Laravel projects, either you define port for Mysql(or mariaDB).
This mean in host only port 3306 connect your Laravel to database.
Upvotes: 7
Reputation: 418
Try change port to 3306 and use DB_HOST=localhost to yourdomain.com(your IP)
And don't forget Sudo Clear cache and config cache
DB_HOST=My_ip_for_virtual_machine (yourdomain.com)
sudo docker-compose exec app php artisan config:clear
sudo docker-compose exec app php artisan cache:clear
Upvotes: 4
Reputation: 8340
First edit your docker-compose.yml
.
mysql:
image: mariadb:latest
ports:
- 8889:3306
After that set the correct DB port in .env
.
Your DB port is wrong. You are trying to connect the exposed port inside the docker. In this case you should use DB_PORT=3306
in your .env
.
Upvotes: 23
Reputation: 3901
If you don't want to set the DB port like in @kotapeter's answer, you can instead invoke artisan through docker by running:
$ docker exec -it <name of container> php artisan migrate
Looking at your docker-compose.yml
, your container could be laravel_app_app_1
but you can check this by running docker ps
Upvotes: 0