Laravel Scout (meilisearch) 与 Docker

Jud*_*les 6 php laravel docker docker-compose meilisearch

我正在尝试将 LaravelScout与 docker 一起使用,我按照文档Laravel Scout Docs 进行了安装所需的所有步骤,一切都按预期启动并运行。但每当我尝试搜索数据时,我都会收到此错误cURL error 7: Failed to connect to 127.0.0.1 port 7720: Connection refused。我正在将请求发送insomnialaravel路由网络。

  • 注意:- 当我访问http://127.0.0.1:7720/时,会显示 meilisearch 默认页面。也尝试过curl -kvs --http2 --request GET 'http://localhost:7720/indexes'它工作正常并返回Connected to localhost (127.0.0.1) port 7720 (#0),但每当我发送时,insomnia我都会收到错误

重现错误的步骤

  1. Event尝试通过关键字搜索模型PENDING

    \App\Models\Event::search('PENDING')->get()

  2. 事件模型类

<?php

namespace App\Models;

use Illuminate\Support\Str;
use Laravel\Scout\Searchable;
use Database\Factories\EventFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Event extends Model
{
    use HasFactory;

    use Searchable;

    public $incrementing = false;

    protected $keyType   = 'string';

    protected $fillable = ['event_type_id', 'status'];

    protected static function boot()
    {
        parent::boot();
        static::creating(function ($model) {
            $model->id = Str::uuid()->toString();
        });
    }

    public static function newFactory(): EventFactory
    {
        return EventFactory::new();
    }
}

Run Code Online (Sandbox Code Playgroud)
  1. Laravel.env文件
SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://127.0.0.1:7720
MEILISEARCH_KEY=masterKey
MEILISEARCH_NO_ANALYTICS=false
MEILISEARCH_NO_SENTRY=true
Run Code Online (Sandbox Code Playgroud)
  1. docker-compose.yml
version: "3.7"
services:
    app:
        build:
            context: ./
            dockerfile: Dockerfile
        image: app:latest
        container_name: app
        restart: unless-stopped
        working_dir: /var/www/
        volumes:
            - ./:/var/www
        ports:
            - 9000:9000
        networks:
            - app-network

    db:
        image: mysql:8.0
        container_name: db
        restart: unless-stopped
        environment:
            MYSQL_DATABASE: ${DB_DATABASE}
            MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
            MYSQL_PASSWORD: ${DB_PASSWORD}
            MYSQL_USER: ${DB_USERNAME}
            SERVICE_TAGS: dev
            SERVICE_NAME: mysql
        volumes:
            - ./docker-compose/mysql:/docker-entrypoint-initdb.d
        networks:
            - app-network
        ports:
            - 3307:3306

    nginx:
        image: nginx:alpine
        container_name: nginx
        restart: unless-stopped
        ports:
            - 8000:80
        volumes:
            - ./:/var/www
            - ./docker-compose/nginx:/etc/nginx/conf.d/
        networks:
            - app-network

    phpmyadmin:
        image: phpmyadmin
        container_name: pma
        restart: unless-stopped
        ports:
            - 8283:80
        environment:
            PMA_HOSTS: ${DB_HOST}
            PMA_ARBITRARY: 1
            PMA_USER: ${DB_USERNAME}
            PMA_PASSWORD: ${DB_PASSWORD}
        networks:
            - app-network

    meilisearch:
        image: getmeili/meilisearch:latest
        container_name: meilisearch
        restart: unless-stopped
        ports:
            - 7720:7700
        environment:
            MEILI_NO_ANALYTICS: ${MEILISEARCH_NO_ANALYTICS}
            MEILI_NO_SENTRY: ${MEILISEARCH_NO_SENTRY}
            MEILI_MASTER_KEY: ${MEILISEARCH_KEY}
        networks:
            - app-network
        volumes:
            - ./meilisearch-data:/meilisearch-data

networks:
    app-network:
        driver: bridge

Run Code Online (Sandbox Code Playgroud)

Jud*_*les 8

我发现问题是我正在使用meilisearchdocker 服务,所以我应该指定MEILISEARCH_HOSTenv 变量来指向服务名称,例如DB_HOST=db(docker 服务名称)。所以在这种情况下,我将其更改MEILISEARCH_HOST为现在一切都按预期正常工作。MEILISEARCH_HOST=http://127.0.0.1:7720 MEILISEARCH_HOST=meilisearch:7700