Каков синтаксис для ELASTICSEARCH_HOSTS в docker -compose? - PullRequest
0 голосов
/ 26 мая 2020

Пытаюсь выяснить синтаксис Kibana ELASTICSEARCH_HOSTS, но получаю:

kib01     |  FATAL  Error: [config validation of [elasticsearch].hosts]: types that failed validation:
kib01     | - [config validation of [elasticsearch].hosts.0]: expected URI with scheme [http|https].
kib01     | - [config validation of [elasticsearch].hosts.1]: could not parse array value from json input

от самого Kibana или:

ERROR: The Compose file './docker-compose.yml' is invalid because:
services.kibana.environment.ELASTICSEARCH_HOSTS contains ["http://es01:9200", "http://es02:9200", "http://es03:9200", "http://es04:9200"], which is an invalid type, it should be a string, number, or a null

из Docker compose.

Моя последняя итерация:

environment:
  ELASTICSEARCH_HOSTS=["http://es01:9200", "http://es02:9200", "http://es03:9200", "http://es04:9200"]

Я также пробовал:

environment:
  - ELASTICSEARCH_HOSTS: '["http://es01:9200", "http://es02:9200", "http://es03:9200", "http://es04:9200"]'

Я попытался превратить это в список:

environment:
  ELASTICSEARCH_HOSTS:
    - "<host1>"
    - "<host2>"

Я попытался удалить кавычки в различных местах в приведенном выше варианте и в различных комбинациях в списке.

Я также пробовал комбинацию из официальной документации , используя как :, так и =

с ELASTICSEARCH_HOST = http://es01:9200, http://es02:9200...

Все были отклонены . Кто-нибудь знает синтаксис magi c, чтобы заставить это работать?

Обновленный список сбоев:

  ELASTICSEARCH_HOSTS: ['http://es01:9200','http://es02:9200','http://es03:9200','http://es04:9200']
  ELASTICSEARCH_HOSTS="['http://es01:9200','http://es02:9200','http://es03:9200','http://es04:9200']"
  - ELASTICSEARCH_HOSTS=['http://es01:9200','http://es02:9200','http://es03:9200','http://es04:9200']
  - ELASTICSEARCH_HOSTS="["http://es01:9200","http://es02:9200","http://es03:9200","http://es04:9200"]"
  ELASTICSEARCH_HOSTS:
    - "<host1>"
    - "<host2>"

1 Ответ

2 голосов
/ 26 мая 2020

Для решения вашей проблемы следует отметить несколько моментов:

  • В docker -compose переменные среды должны быть записаны как объект или массив:
# A native yaml approach to define key-value objects
environment:  
  KEY1: VAL11
  KEY2: VAL2
# OR
# Some special way for compose yaml parser
# that can split key and value from a "KEY1=VAL1" string
environment:  
  - KEY1=VAL1
  - KEY2=VAL2
  • Значение переменной среды должно быть строкой (пример выше), числом или нулем (пустое значение). Обратите внимание, что [foo, bar] анализируется как список в собственном (первом) формате, но способ компоновки (второй) анализирует его как строку.

  • In this вопрос на форуме, есть пример того, как передать несколько хостов elasticsearch в качестве переменной среды (ELASTICSEARCH_HOSTS).

Итак, это должен быть действительный пример, что docker -compose и Kibana оба понимают:

environment:
  ELASTICSEARCH_HOSTS: '["http://es01:9200","http://es02:9200","http://es03:9200","http://es04:9200"]'
# OR
environment:
  - ELASTICSEARCH_HOSTS=["http://es01:9200","http://es02:9200","http://es03:9200","http://es04:9200"]
...