elasticsearch,docker-compose,Docker,elasticsearch,Docker Compose" /> elasticsearch,docker-compose,Docker,elasticsearch,Docker Compose" />

具有单个docker compose文件的多孤岛elasticsearch群集

具有单个docker compose文件的多孤岛elasticsearch群集,docker,elasticsearch,docker-compose,Docker,elasticsearch,Docker Compose,我想在一个docker compose文件中创建两个elasticsearch集群,这样我就可以只在新的es集群上测试一些更改 我的docker编写文件如下所示 version: "2.2" services: elasticsearch-master: image: elasticsearch:6.6.0 volumes: - esdata1:/usr/share/elasticsearch/data ports: - &

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

我的docker编写文件如下所示

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:
我有一个java服务,我在其中使用不同的环境变量添加两个主机

  • -Delasticsearch.host=elasticsearch主机
  • -DnewElasticsearch.host=新的elasticsearch主机
  • 但当我从java搜索服务运行代码时,如下所示

    new RestTemplate().getForEntity("http://elasticsearch-master:9200/_cat/indices?v",String.class)
    
    这给了我正确的回答

    new RestTemplate().getForEntity("http://new-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个不同的连接与不同的端口如下

  • http://elasticsearch-master:9200
  • http://new-elasticsearch-master:9400

  • 谢谢

    您获得了预期的行为。docker compose中的
    ports
    字段将端口映射到本地主机,这意味着“旧”Elasticsearch将通过localhost:9200提供,“新”Elasticsearch将通过localhost:9400提供

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

    因此,您可以通过http://elasticsearch-master:9200 还有新的http://new-elasticsearch-master:9200.

    如果您希望将新的Elasticsearch与9400一起使用,则需要更改其:
    http.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)。

    谢谢,这解决了问题,也理解了问题。