首页 > 解决方案 > 有没有办法在同一主机上的 2 个 Elasticsearch 容器之间进行通信?

问题描述

我通过以下命令部署了 2 个 Elasticsearch 容器:

docker run --network host  -p 9201:9200 -p 9301:9300 -e "discovery.type=single-node"  docker.elastic.co/elasticsearch/elasticsearch:6.8.1 
docker run --network host  -p 9202:9200 -p 9302:9300 -e "discovery.type=single-node"  docker.elastic.co/elasticsearch/elasticsearch:6.8.1 

当我尝试从其中一个容器运行下一个命令时

curl localhost:${PORT_OF_THER_OTHER_CONTAINER}

我得到下一个错误

curl: (7) Failed connect to localhost:PORT_OF_THER_OTHER_CONTAINER; Connection refused

标签: dockerelasticsearch

解决方案


您需要bridge在两个 ES 容器中使用网络,以便它们可以相互发现,而不是使用内部端口,以便使用curl.

  1. 创建一个名为的桥接网络my-bridge-network

docker network create -d bridge my-bridge-network

  1. my-bridge-network在 docker run 命令中使用上面创建的自定义名称作为

docker run --network my-bridge --name es1 -p 9201:9200 -p 9301:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.8.1

现在,在进入容器后,docker exec -it <container-id> /bin/bash运行 curl 命令,curl es1:9200它会给出正确的输出。

{
  "name" : "vwdvbT9",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "dwMh_zK6RmO_VeeoDQXuTg",
  "version" : {
    "number" : "6.8.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "1fad4e1",
    "build_date" : "2019-06-18T13:16:52.517138Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}```

 

推荐阅读