【问题标题】:elasticsearch, magento 1.9弹性搜索,magento 1.9
【发布时间】:2018-07-11 15:49:29
【问题描述】:

我正在尝试将弹性搜索扩展连接到本地的 Magento 1.9 商店。 我创建了 docker-compose.yml

version: "3"

services:
    application:
        container_name: application
        build: docker/application
        volumes:
            - ./application:/app

    php:
        container_name: php_1
        build: docker/php
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./application:/app
        links:
            - elasticsearch

    mysql:
        container_name: mysql
        build: docker/mysql
        ports:
            - 3306:3306
        volumes:
            - ./docker/tmp/db/mysql:/var/lib/mysql
        environment:
            MYSQL_DATABASE: db
            MYSQL_USER: db
            MYSQL_PASSWORD: db
            MYSQL_ROOT_PASSWORD: db
    elasticsearch:
        container_name: elasticsearch
        build: docker/elasticsearch
        ports:
            - 9200:9200
            - 9300:9300
        volumes:
          -./docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
        environment:
            ES_JAVA_OPTS: "-Xmx256m -Xms256m"

我的 Dockerfile 如下所示:

FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.3.1

我的 elasticsearch.yml 看起来像这样:

cluster.name: "docker-cluster"
network.host: 0.0.0.0

discovery.zen.minimum_master_nodes: 1

discovery.type: single-node

在 docker-compose up 命令之后,我可以到达 localhost:9200 并返回:

{
 "name" : "vzqbiF3",
 "cluster_name" : "docker-cluster",
 "cluster_uuid" : "E7nRc0WrRKuD78knlR5zTQ",
 "version" : {
   "number" : "6.3.1",
   "build_flavor" : "oss",
   "build_type" : "tar",
   "build_hash" : "eb782d0",
   "build_date" : "2018-06-29T21:59:26.107521Z",
   "build_snapshot" : false,
   "lucene_version" : "7.3.1",
   "minimum_wire_compatibility_version" : "5.6.0",
   "minimum_index_compatibility_version" : "5.0.0"
 },
 "tagline" : "You Know, for Search"
}

我也可以从带有 elasticsearch 的容器中找到它。命令: curl -X GET 'http://localhost:9200' 返回相同。

问题是我无法从我的 php 容器访问此端口。我收到:

root@45a560f027fe:/app# curl -X GET 'http://localhost:9200'
curl: (7) Failed to connect to localhost port 9200: Connection refused

显然 Magento 无法连接到 elasticsearch。

2018-07-11T17:11:11+02:00 CRIT (2): Elasticsearch server is not reachable

我的错误在哪里?有人,有人吗?

【问题讨论】:

    标签: elasticsearch docker-compose


    【解决方案1】:

    弹性搜索的这个环境应该有助于解决问题

    environment:
              - xpack.security.enabled=false
              - ES_JAVA_OPTS: "-Xmx256m -Xms256m"
    

    但是这个标志关闭了它连接到它的主机的验证。所以在生产中是不安全的。但是,如果你不将端口暴露在 compose 文件之外,那么一切都应该是安全的,并且在容器之间可用

    要从 php 容器内部连接到 elasticsearch,您需要使用此 url

    http://elasticsearch:9200

    为了测试你可能应该能够做到

    curl -X GET 'http://elasticsearch:9200'

    【讨论】:

    • 您好,感谢您的回答。它有很大帮助。现在我可以从 php docker 连接到 elasticsearch,但 magento 仍然返回“Elasticsearch 服务器无法访问”。
    • 您是否在 magento 配置中更改了您的弹性搜索主机?我的意思是您的主机可能是127.0.0.1localhost,您应该更改为elasticsearch。也许如果您没有提供该配置参数,它默认连接到 localhost
    • 您的意思是配置->目录->目录->目录搜索->服务器?我试过:elasticsearch:9200,有和没有'http://',最后有和没有'/'。 'localhost:9200', '127.0.0.1:9200' 也没什么用...
    • 我不是magento的专家,但默认值是什么。你的magento应用程序在哪里设置?在这个php 容器还是application 容器中?也可以试试这个System > Index Managementreindex all
    • 感谢您的帮助。我终于解决了。 Elasticsearch 版本与支持的扩展版本不兼容。我更改了 5.5.3 的扩展和弹性搜索。再次感谢您。