skip to Main Content

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


  1. You should first add it to your project:

    composer require laravel/sail --dev
    

    after that, instal sail:

    php artisan sail:install
    

    then:

    ./vendor/bin/sail up // or sail up
    
    Login or Signup to reply.
  2. I have fixed this issue by adding

    172.19.0.1      laravel.test
    

    in host file on my pc. i am using liunx mint

    sudo nano /etc/hosts
    
    Login or Signup to reply.
  3. 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

    C:WindowsSystem32Driversetchosts
    

    note: you need administrative privileges to edit this file

    Login or Signup to reply.
  4. 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 be php_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 your hosts file.

    • Windows: C:WindowsSystem32Driversetchosts
    • Mac: /etc/hosts
    • Linux: /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

    127.0.0.1 laravel.test
    

    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.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search