【问题标题】:Multiple isloated elasticsearch cluster with single docker-compose file具有单个 docker-compose 文件的多个孤立的弹性搜索集群
【发布时间】:2021-04-17 15:11:41
【问题描述】:

我想在单个 docker-compose 文件中创建 2 个 elasticsearch 集群,这样我就可以只在新的 es 集群上测试一些更改,

我的 docker-compose 文件是这样的

version: "2.2"
services:
  elasticsearch-master:
    image: elasticsearch:6.6.0
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    mem_limit: '2048M'

  new-elasticsearch-master:
    image: elasticsearch:6.6.0
    volumes:
      - esdata2:/usr/share/elasticsearch/data
    ports:
      - "9400:9200"
    mem_limit: '2048M'

  search:
    image: search:latest
    entrypoint: java -Delasticsearch.host=elasticsearch-master -DnewElasticsearch.host=new-elasticsearch-master -DnewElasticsearch.port=9400 -jar app.jar
    ports:
      - "8083:8083"
    depends_on:
      - elasticsearch-master
      - new-elasticsearch-master
    mem_limit: '500M'
volumes:
  esdata1:
  esdata2:

我有 1 个 java 服务,我在其中添加具有不同环境变量的主机

  1. -Delasticsearch.host=elasticsearch-master
  2. -DnewElasticsearch.host=new-elasticsearch-master

但是当我从 java 搜索服务运行代码如下

new RestTemplate().getForEntity("http://elasticsearch-master:9200/_cat/indices?v",String.class)

这给了我正确的回应。


但是当我尝试连接到 9400 上的另一台主机时。

new RestTemplate().getForEntity("http://new-elasticsearch-master:9400/_cat/indices?v",String.class)

我收到连接被拒绝错误

当我尝试使用 9200 的同一主机时,会得到 200 响应。

new RestTemplate().getForEntity("http://new-elasticsearch-master:9200/_cat/indices?v",String.class)

谁能告诉我如何用不同的端口进行 2 个不同的连接,如下所示。

  1. http://elasticsearch-master:9200
  2. http://new-elasticsearch-master:9400

谢谢

【问题讨论】:

    标签: docker elasticsearch docker-compose


    【解决方案1】:

    你得到了预期的行为。 docker-compose 中的 ports 字段将端口映射到您的 localhost,这意味着“旧”Elasticsearch 将通过 localhost:9200 可用,而“新”Elasticsearch 将通过 localhost:9400 可用。

    另一方面,docker-compose 服务在内部网络中通信,服务名称是主机名,端口是原始监听端口。

    因此,您可以通过 http://elasticsearch-master:9200 访问(内部)旧的,通过 http://new-elasticsearch-master:9200 访问新的。

    如果您希望将新的 Elasticsearch 与 9400 一起使用,您需要更改其 settingshttp.port。你可以这样做:

      new-elasticsearch-master:
        image: elasticsearch:6.6.0
        volumes:
          - esdata2:/usr/share/elasticsearch/data
        environment:
          - http.port=9400
        ports:
          - "9400:9400"
        mem_limit: '2048M'
    

    请注意,您还必须更改端口映射(因为它会将您的新端口 9400 映射到本地主机 9400)。

    【讨论】:

    • 谢谢,这解决了问题,也理解了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多