docker - 有没有办法在同一主机上的 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
解决方案
您需要bridge
在两个 ES 容器中使用网络,以便它们可以相互发现,而不是使用内部端口,以便使用curl
.
- 创建一个名为的桥接网络
my-bridge-network
docker network create -d bridge my-bridge-network
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"
}```
推荐阅读
- javascript - 创建客户端 Spotify 播放器
- python - 使用上下文管理器复制 Tensorflow - __enter__ 和 __exit__ 错误
- c# - 使用 DependencyProperty 自定义控件的设计器行为
- javascript - 将用户输入保存到 PHP,然后在 Javascript 函数中使用
- boost-spirit-qi - 提升精神,phoenix::push_back 和语义动作中的功能
- geolocation - 在屏幕上加载地图时,地理位置会变慢
- python - 比较两个图像中连接组件的标签
- powershell - Powershell v5.1 Invoke-RestMethod 和绕过代理
- python - Python 中的包导入
- scheme - 我如何将(不是 f)作为 f 传递?