docker - 为什么docker上的ElasticSearch拒绝来自另一个docker容器的连接但没有拒绝curl get

标签 docker elasticsearch

如下所示,当我尝试curl localhost(也从浏览器)时,我可以到达本地docker,暴露elasticsearch端口,但当我尝试从另一个容器连接时,它会失败。我从两个(curl 和另一个容器)中读到了几个具有相同问题(连接被拒绝)的问题,但就我而言,我只遇到来自另一个容器的问题。

C:\Dockers\megalog-try-1>docker run docker.elastic.co/beats/filebeat:7.5.2 setup -E setup.kibana.host=localhost:5601 -E output.elasticsearch.hosts=["localhost:9200"]
Exiting: Couldn't connect to any of the configured Elasticsearch hosts. Errors: [Error connection to Elasticsearch http://localhost:9200: Get http://localhost:9200: dial tcp [::1]:9200: connect: cannot assign requested address]

C:\Dockers\megalog-try-1>curl localhost:9200
{
  "name" : "f225ebd4879e",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "YyfW8X5DRt2RTacNYlZ3jA",
  "version" : {
    "number" : "7.5.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "8bec50e1e0ad29dad5653712cf3bb580cd1afcdf",
    "build_date" : "2020-01-15T12:11:52.313576Z",
    "build_snapshot" : false,
    "lucene_version" : "8.3.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

C:\Dockers\megalog-try-1>docker-compose ps
            Name                           Command               State                            Ports                 
---------------------------------------------------------------------------------------------------------------------------------
megalog-try-1_elasticsearch_1   /usr/local/bin/docker-entr ...   Up      0.0.0.0:9200->9200/tcp, 9300/tcp               
megalog-try-1_filebeat_1        /usr/local/bin/docker-entr ...   Up                                                     
megalog-try-1_kafka1_1          /etc/confluent/docker/run        Up      0.0.0.0:9092->9092/tcp                         
megalog-try-1_kafka2_1          /etc/confluent/docker/run        Up      0.0.0.0:9093->9092/tcp                         
megalog-try-1_kafka3_1          /etc/confluent/docker/run        Up      0.0.0.0:9094->9092/tcp                         
megalog-try-1_kibana_1          /usr/local/bin/dumb-init - ...   Up      0.0.0.0:5601->5601/tcp                         
megalog-try-1_logstash_1        /usr/local/bin/docker-entr ...   Up      5044/tcp, 0.0.0.0:7777->7777/tcp, 0.0.0.0:9600->9600/tcp
megalog-try-1_zoo1_1            /etc/confluent/docker/run        Up      0.0.0.0:2181->2181/tcp, 2888/tcp, 3888/tcp     
megalog-try-1_zoo2_1            /etc/confluent/docker/run        Up      0.0.0.0:2182->2181/tcp, 2888/tcp, 3888/tcp     
megalog-try-1_zoo3_1            /etc/confluent/docker/run        Up      0.0.0.0:2183->2181/tcp, 2888/tcp, 3888/tcp     

C:\Dockers\megalog-try-1> 

*** 编辑 1

C:\Dockers\megalog-try-1>docker run -it docker.elastic.co/beats/filebeat:7.5.2 setup -E setup.kibana.host=192.168.44.209:5601 -E output.elasticsearch.hosts=["192.168.44.209:9200"] bash
Exiting: 503 Service Unavailable: {"error":{"root_cause":[{"type":"failed_to_commit_cluster_state_exception","reason":"publication failed"}],"type":"master_not_discovered_exception","reason":"FailedToCommitClusterStateException[publication failed]; nested: AlreadyClosedException[Underlying file changed by an external force at 1970-01-01T00:00:00Z, (lock=NativeFSLock(path=/usr/share/elasticsearch/data/nodes/0/node.lock,impl=sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive valid],creationTime=2020-02-06T19:25:40.498294Z))];","caused_by":{"type":"failed_to_commit_cluster_state_exception","reason":"publication failed","caused_by":{"type":"already_closed_exception","reason":"Underlying file changed by an external force at 1970-01-01T00:00:00Z, (lock=NativeFSLock(path=/usr/share/elasticsearch/data/nodes/0/node.lock,impl=sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive valid],creationTime=2020-02-06T19:25:40.498294Z))"}}},"status":503}

C:\Dockers\megalog-try-1>docker run docker.elastic.co/beats/filebeat:7.5.2 setup -E setup.kibana.host=192.168.44.209:5601 -E output.elasticsearch.hosts=["192.168.44.209:9200"]
Exiting: 503 Service Unavailable: {"error":{"root_cause":[{"type":"master_not_discovered_exception","reason":null}],"type":"master_not_discovered_exception","reason":null},"status":503}

C:\Dockers\megalog-try-1>

最佳答案

Docker 创建的容器是独立的单元,在虚拟交换机中拥有自己的 IP。

通过绑定(bind)端口,您可以使 Docker(位于您实际的本地计算机上)将特定端口的传入请求公开(路由)到该虚拟网络中的特定容器。

当您启动第二个容器时,通过告诉它elasticsearch位于localhost:9000,您就告诉它它实际上位于同一个容器(容器2)中,这是不正确的。 p>

您需要向第二个容器提供elasticsearch所在容器的IP(或者在这种情况下,您甚至可以提供您机器的IP,因为端口已绑定(bind)),但可以肯定的是,您不能对容器2说:连接到localhost

让我知道如何使这个答案更清楚。

关于docker - 为什么docker上的ElasticSearch拒绝来自另一个docker容器的连接但没有拒绝curl get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60102462/

相关文章:

docker - Kubernetes Pod 中容器的性能问题

elasticsearch - 将自定义分析器添加到使用 spring 构建的索引的基础知识

elasticsearch - Elasticsearch 中权重和提升的区别

elasticsearch - 替换字段名称中的点

apache-spark - 在ElasticSearch中将Spark DateType字段索引为日期

hadoop - 高效地将大量数据迁移到 Elasticsearch-hadoop

Docker 放置首选项与 Docker 放置约束

java - 为什么 MariaDB 加载设置大约需要 5-8 分钟?

docker - 用ECS任务ID命名Sidekiq工作进程

javascript - 如何在 js 脚本中读取 docker 环境变量?