I’m a Dockers / Sail beginner and wanted to give it a try with a new Laravel project.
So, when I execute a Laravel fresh install, and i run sail up
i get this error:
no such service: laravel.test
However, http://localhost
returns the expected result.
But http://laravel.test
doesn’t return anything.
Just updated PHP, Laravel and Dockers – so they are running on the latest versions.
Do you know how can I fix this?
EDIT: Added the whole docker-compose.yml file
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.1
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.1/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
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'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql:mysql
ports:
- 8080:80
environment:
MYSQL_USERNAME: "${DB_USERNAME}"
MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
PMA_HOST: mysql
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sail-mysql:
driver: local
4
Answers
You should first add it to your project:
after that, instal sail:
then:
I have fixed this issue by adding
in host file on my pc. i am using liunx mint
It’s probably because of laravel.test domain not registered in your system
so if you use Linux use @Saravana Sai’s answer
but if you use windows the host file exists in
note: you need administrative privileges to edit this file
the name
The name
laravel.test
for this service is poorly chosen. All the other services give a more proper clue as to what service is running in the container.In the case of
laravel.test
, there runs a php built-in web server, which is kept running by a supervisor. A better name would bephp_webserver
for example.not being able to access laravel.test
Domains are bought (although it’s more like renting) from a domain registrar. However the tld
.test
is reserved for testing and can’t be bought. The most common way to create a fake domain for testing is by modifying yourhosts
file.C:WindowsSystem32Driversetchosts
/etc/hosts
/etc/hosts
This file requires admin access, so you need to start your text editor as admin to make changes. Here you can make a newline entry with the content
This will make your OS check for localhost when trying to access
laravel.test
.You can of course keep using 127.0.0.1 to check your site like always.