如何使用docker compose安装ElasticSeach插件

diu*_*lde 6 elasticsearch docker elasticsearch-plugin docker-compose

我有一个带有弹性搜索图像的docker-compose.yml文件:

elasticsearch:
  image: elasticsearch
  ports:
    - "9200:9200"
  container_name: custom_elasticsearch_1
Run Code Online (Sandbox Code Playgroud)

如果我想安装其他插件,如HQ接口或附件映射器,我必须使用以下命令进行手动安装:

$ docker exec custom_elasticsearch_1 plugin install royrusso/elasticsearch-HQ
$ docker exec custom_elasticsearch_1 plugin install mapper-attachments
Run Code Online (Sandbox Code Playgroud)

有没有办法在我运行docker-compose up命令时自动安装它们?

Big*_*ood 11

受到@NickPridorozhko 回答的启发,但使用 elasticsearch^7.0.0(使用 docker stack / swarm)进行更新和测试,例如 analysis-icu:

elasticsearch:
  image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
  user: elasticsearch
  command: >
    /bin/sh -c "./bin/elasticsearch-plugin list | grep -q analysis-icu 
    || ./bin/elasticsearch-plugin install analysis-icu; 
    /usr/local/bin/docker-entrypoint.sh"
  ...
Run Code Online (Sandbox Code Playgroud)

主要区别在于 ^7.0.0 的更新命令,以及使用 docker 入口点而不是 ./bin/elasticsearch(在堆栈的上下文中,您会收到与可生成进程限制相关的错误)。

  • 对于 Opensearch,这也适用于 `/usr/share/opensearch/bin/opensearch-plugin` 和 `/usr/share/opensearch/opensearch-docker-entrypoint.sh` (3认同)
  • @Kay 这似乎没有关系。请参阅[此 github 问题](https://github.com/elastic/cloud-on-k8s/issues/2220) 和此[其他答案](/sf/ask/4018457411/需要更多权利)。 (2认同)

fyl*_*lie 10

是Elastic的博客文章,正是如此!您需要使用Dockerfile执行命令来扩展图像.你的Dockerfile看起来像这样:

FROM custom_elasticsearch_1

RUN plugin install royrusso/elasticsearch-HQ
Run Code Online (Sandbox Code Playgroud)

  • 嗯,所以如果不添加另一个 Dockerfile 就没有办法实现吗?我想在 docker-compose 里面做 (3认同)
  • 如果将build命令添加到docker-compose.yml,Docker compose将使用Dockerfile.[here](https://blog.codeship.com/orchestrate-containers-for-development-with-docker-compose/)是使用Compose的Dockerfile的示例.但是,[这里](https://coderwall.com/p/ouemxq/install-plugins-on-elasticsearch-with-docker-compose)是某人在没有Dockerfile的情况下安装插件的示例. (3认同)

Dav*_*gne 7

ingest-attachment 插件需要额外的权限,并在安装过程中提示用户。我使用了yes命令:

elasticsearch:
  image: elasticsearch:6.8.12
  command: >
    /bin/sh -c "./bin/elasticsearch-plugin list | grep -q ingest-attachment 
    || yes | ./bin/elasticsearch-plugin install --silent ingest-attachment; 
    /usr/local/bin/docker-entrypoint.sh eswrapper"
Run Code Online (Sandbox Code Playgroud)


Nic*_*hko 5

这对我有用。先安装插件,然后继续启动elasticsearch。

elasticsearch:
  image: elasticsearch
  command:
    - sh
    - -c
    - "plugin list | grep -q plugin_name || plugin install plugin_name;
       /docker-entrypoint.sh elasticsearch"
Run Code Online (Sandbox Code Playgroud)