Setting up Laradock is pretty straightforward …. once you have done it all. As it the same for most things in life. Allow me to share the major snags I ran into setting it all up.
Installing Docker
Setting up Docker on your box is not hard. Not anymore with Docker native. It now runs with ease on my MBP and so should it be on your Windows box. So I will not get into that in great detail. With Docker natively up and running you can do the basic Laradock setup:
- create project folder
- add laravel directory
- add laradock directory
- Laradock .env app path check
- Laravel .env edit for database details
- hosts file – add 127.0.0.1 laravel.test to /etc/hosts
- NGINX – /etc/nginx/sites/available/laravel.conf creation based on example and check
and a simple:
docker-compose up -d nginx mariadb redis workspace
will get you going with the necessary containers.
NB I will not go into installing git which you will be needing to clone Laravel and Laradock. But I assume you got that down already.
Port Conflicts
However if you were already running MAMP, XAMP or Laravel Valet with MariaDB you will have issues running the containers as ports will be occupied. Allow me to share a great command to see what is running on port 3306 and 443 for you to quickly figure this out:
lsof -n -i4TCP:3306 | grep LISTEN lsof -n -i4TCP:443 | grep LISTEN
Using this command for these two ports I realized Laravel Valet was up and running so I did a:
valet stop
and to stop Homebrew’s MariaDB I did a:
brew services stop mariadb
Afterwards the ports 443 and 3306 were available.
Laradock running?
You will have Laradock running now. And the command:
docker-compose up -d nginx mariadb redis workspace
should work with port conflicts out of the way. And on localhost or with /etc/hosts tweaked you should be able to load something like this:
But you will see soon enough you are not out of the woods yet.
MySQL Connection Refused
So all happy with port conflicts dealt with and with all containers up and running you enter your Docker workspace box and run php artisan migrate:
docker-compose exec workspace bash
php artisan migrate
thinking it will just run…. Then you will get something like:
[Illuminate\Database\QueryException] SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = homestead and table_name = migrations) [PDOException] SQLSTATE[HY000] [2002] Connection refused
This is because your Laravel .env is not grabbing the proper database host.
Laravel .env tweak
To deal with this issue make sure you use mysql for the host inside the laravel .env file:
DB_HOST=mariadb DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret DB_PORT=3306
And that the user, password and databases are added to the Laradock .env. Otherwise you will have to add them manually in MariaDB using the command line or a program like Sequel Pro. Once you have all that done you can access the database from your Docker workspace and run migrations:
root@fa3ff8144e8e:/var/www# php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table
And when you access the database using Sequel Pro and 127.0.0.1 as host with the earlier mentioned user and database credentials you will see the new tables inside the database: