Как я могу использовать дополнительный контейнер / службу elasticsearch с ddev?

Как я могу настроить службу / контейнер для предоставления elasticsearch с помощью ddev? Я пробовал несколько экспериментов из https://ddev.readthedocs.io/en/latest/users/extend/additional-services/, но у вас недостаточно ноу-хау docker-compose, чтобы сделать одно для elasticsearch.


person rfay    schedule 07.02.2019    source источник


Ответы (2)


@thursdaybw предоставил этот рецепт в https://github.com/drud/ddev/pull/1320, но он так и не получил поддержки, и никто его не проверял, поэтому его перемещают сюда для распространения и инкубации в сообществе. Пожалуйста, поделитесь своими предложениями, если вы его используете.

Изменить 2019-09-30: теперь есть пример Elasticsearch в ddev-contrib по адресу https://github.com/drud/ddev-contrib/tree/master/docker-compose-services/elasticsearch

Основная информация (и рассмотренные примеры) для настройки дополнительных служб находится по адресу https://ddev.readthedocs.io/en/latest/users/extend/additional-services/

version: '3.6'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - VIRTUAL_HOST=$DDEV_HOSTNAME # This defines the host name the service should be accessible from. This will be sitename.ddev.local
      - HTTP_EXPOSE=9200
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200
    labels:
    # These labels ensure this service is discoverable by ddev
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: $DDEV_APPROOT

volumes:
  esdata1:
    driver: local
person rfay    schedule 07.02.2019
comment
Выполнено максимальное количество областей виртуальной памяти vm.max_map_count [65530] слишком мало, увеличьте ошибку как минимум до [262144]. Добавлен - discovery.type=single-node под environment:, чтобы он работал. Из того, что я прочитал, это отключает проверки начальной загрузки, что должно быть хорошо для разработки. - person Madis; 05.06.2019
comment
Предполагается, что имя хоста подключения должно быть ddev-PROJECTNAME-elasticsearch: 9200? Я пытаюсь заставить его работать с модулем elasticsearch_connector, но он не может подключиться. - person Damien McKenna; 25.06.2019
comment
Это container_name бесполезно; это уже имя по умолчанию. Имя хоста внутри проекта будет elasticsearch, имя службы. Я отредактирую. Но для проверки внутри веб-контейнера используйте telnet elasticsearch 9200, чтобы узнать, можете ли вы подключиться. Я поднял этот вопрос, и подключение сработало. Разоблачение там может быть ненужным, то есть выставлять его на маршрутизаторе, но если вы не собираетесь подключаться к веб-интерфейсу с хоста, это не покажется полезным. - person rfay; 25.06.2019
comment
Я пробовал это в .ddev/docker-compose.elastic.yaml. Контейнер запускается (Creating ddev-foobar_elasticsearch_1 ... done), но я не могу добраться до него из своего веб-контейнера. Я пробовал ddev ssh, затем telnet elasticsearch 9200 - Name or service not known. Хост недоступен. Я использовал elasticsearch 7.2.0 - person Mateng; 01.08.2019
comment
@Mateng имя elasticsearch не отображается внутри контейнера, я не думаю. Вы хотите telnet ddev-<projectname>_elasticsearch_1 9200 внутри веб-контейнера. Однако ... вы можете вернуться к версии elasticsearch в этом примере (которая, похоже, работает). 7.2.0 показывает ERROR: [1] bootstrap checks failed [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured на ddev logs -s elasticsearch - person rfay; 02.08.2019

Для запуска одного узла данный пример мне не помог. Без предоставления дополнительных сообщений об ошибках контейнер был снова остановлен. Используя следующую конфигурацию, я смог запустить только один узел ES, а не как кластер (как указано в предыдущем ответе):

version: '3.6'
services:
  elasticsearch:
    container_name: ddev-${DDEV_SITENAME}-elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
    environment:
      - node.name=${DDEV_SITENAME}-es01
      - discovery.type=single-node
      - cluster.name=docker-${DDEV_SITENAME}-es-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.platform: ddev
      com.ddev.app-type: elasticsearch
      com.ddev.approot: $DDEV_APPROOT
  web:
    links:
      - elasticsearch:elasticsearch

volumes:
  esdata01:
    driver: local
    name: "${DDEV_SITENAME}-es"

Кроме того, используя эту конфигурацию, вы могли напрямую обращаться к узлу, используя имя хоста elasticsearch из другого контейнера.

person Nico Haase    schedule 12.07.2019