如下所示,当我尝试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/