почему ElasticSearch на docker отказался от соединения с другим docker контейнером, но не отказался от curl get - PullRequest
0 голосов
/ 06 февраля 2020

Как показано ниже, я могу достичь своего локального docker, открывающего порт эластичного поиска, когда я пробую curl localhost (также из Браузера), но он терпит неудачу, когда я пытаюсь подключиться из другого контейнера. Я прочитал несколько вопросов с одной и той же проблемой (соединение отказано) из обоих (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> 

*** edit 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>

1 Ответ

1 голос
/ 06 февраля 2020

Docker создает контейнеры, которые являются автономными единицами, которые имеют собственный IP-адрес в виртуальном коммутаторе.

Связывая порты, вы заставляете свой docker (который находится на вашем фактическом локальном компьютере) выставляться (маршрут ) поступающие запросы на указанный c порт к указанному c контейнеру в этой виртуальной сети.

Когда вы запускаете свой ВТОРОЙ контейнер, сообщая ему, чтоasticsearch находится на localhost:9000, вы сообщаете ему, что он фактически находится в одном и том же контейнере (контейнере 2), что не соответствует действительности.

Вам необходимо предоставить ВТОРОМУ контейнеру ip контейнера, в котором находитсяasticsearch (или в этом случае вы даже можете указать ip ваша машина связана с портами), но вы не можете сказать контейнеру 2 о подключении к localhost.

Дайте мне знать, как я могу сделать этот ответ более ясным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...