Docker

When developing using Docker, the Ray host should point to the internal IP of your Docker host by using 'host.docker.internal' in the config file.

<?php
// Save this in a file called "ray.php"

return [
    /*
     *  The host used to communicate with the Ray app.
     */
    'host' => 'host.docker.internal',

    /*
     *  The port number used to communicate with the Ray app.
     */
    'port' => 23517,

    /*
     *  Absolute base path for your sites or projects in Homestead, Vagrant, Docker, or another remote development server.
     */
    'remote_path' => null,

    /*
     *  Absolute base path for your sites or projects on your local computer where your IDE or code editor is running on.
     */
    'local_path' => null,
];

To make sure that Ray uses the correct file path for creating the links, you will also need to set up the remote_path and local_path variables. remote_path is the absolute path of your project in the Docker container. local_path is the absolute path of your project on the local file system.

Example: In your docker-compose.yml you mount the volume as follows:

volumes:
  - .:/var/www

Then remote_path should be /var/www and local_path should be the absolute path to the directory that you mount as /var/www, which is where your docker-compose.yml is located in the example (you can find this by running pwd inside that directory if you are on Linux).

Add 127.0.0.1 host.docker.internal to /etc/hostsfile.

On Linux, you will also need to add an 'extra_hosts' parameter to your PHP container definitions to expose 'host.docker.internal'. Please make sure you are using Docker 20.03 or higher.

#docker-compose.yml

services:
  site:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "80:80"
    depends_on:
      - php
      - db
    networks:
      - packt-api
    extra_hosts: # <-- does no harm
      - "host.docker.internal:host-gateway" # <-- does no harm

  php:
    image: php:fpm-alpine
    …
    networks:
      - packt-api
    extra_hosts: # <--- this is required
      - "host.docker.internal:host-gateway" # <--- this is required

If you are using Lando, you can add this to your overrides:

services:
    appserver:
        overrides:
            extra_hosts:
                - "host.docker.internal:host-gateway"

If it does not work after that, you could try to open your GatewayPorts inside your ssh config.

Go to your SSH config:

nano /etc/hosts/sshd_config

Search for GatewayPorts and set it from no to yes

GatewayPorts yes

On this page

Help us improve this page