Как я могу настроить службу / контейнер для предоставления elasticsearch с помощью ddev? Я пробовал несколько экспериментов из https://ddev.readthedocs.io/en/latest/users/extend/additional-services/, но у вас недостаточно ноу-хау docker-compose, чтобы сделать одно для elasticsearch.
Как я могу использовать дополнительный контейнер / службу elasticsearch с ddev?
Ответы (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
- discovery.type=single-node
под environment:
, чтобы он работал. Из того, что я прочитал, это отключает проверки начальной загрузки, что должно быть хорошо для разработки.
- person Madis; 05.06.2019
container_name
бесполезно; это уже имя по умолчанию. Имя хоста внутри проекта будет elasticsearch, имя службы. Я отредактирую. Но для проверки внутри веб-контейнера используйте telnet elasticsearch 9200
, чтобы узнать, можете ли вы подключиться. Я поднял этот вопрос, и подключение сработало. Разоблачение там может быть ненужным, то есть выставлять его на маршрутизаторе, но если вы не собираетесь подключаться к веб-интерфейсу с хоста, это не покажется полезным.
- person rfay; 25.06.2019
.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
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
из другого контейнера.