如何使用 docker compose 安装 ElasticSearch 插件
Posted
技术标签:
【中文标题】如何使用 docker compose 安装 ElasticSearch 插件【英文标题】:How to install ElasticSeach plugins using docker compose 【发布时间】:2017-02-03 03:17:13 【问题描述】:我有一个带有弹性搜索图像的 docker-compose.yml 文件:
elasticsearch:
image: elasticsearch
ports:
- "9200:9200"
container_name: custom_elasticsearch_1
如果我想安装其他插件,例如 HQ 界面或附件映射器,我必须使用以下命令进行手动安装:
$ docker exec custom_elasticsearch_1 plugin install royrusso/elasticsearch-HQ
$ docker exec custom_elasticsearch_1 plugin install mapper-attachments
有没有办法在我运行docker-compose up
命令时自动安装它们?
【问题讨论】:
【参考方案1】:Here 是 Elastic 的一篇博文,与此完全相关!您需要使用 Dockerfile 来执行命令来扩展图像。您的 Dockerfile 将如下所示:
FROM custom_elasticsearch_1
RUN elasticsearch-plugin install royrusso/elasticsearch-HQ
【讨论】:
嗯,所以如果不添加另一个 Dockerfile 就没有办法实现这一点吗?我想在 docker-compose 里面做 如果将构建命令添加到 docker-compose.yml,Docker compose 会使用 Dockerfile。 Here 是在 Compose 中使用 Dockerfile 的示例。但是,here 是有人在没有 Dockerfile 的情况下安装插件的示例。 我明白了,显然总是需要一个附加文件。 谢谢,@fylie。您的回答今天可能为我节省了几个小时。 这不适用于截至 2021 年的最新 Docker 版本。RUN plugin install <plugin_name>
抛出错误说 plugin
in not found!以下作品:RUN elasticsearch-plugin install analysis-icu
请更新答案,因为这已被问题所有者接受为答案。【参考方案2】:
受@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"
...
主要区别在于 ^7.0.0 的更新命令,以及使用 docker 入口点而不是 ./bin/elasticsearch(在堆栈的上下文中,您会收到与可生成进程限制相关的错误) .
【讨论】:
当我使用它来安装 repoistory-s3 时,这给了我一个错误“警告:插件需要额外的权限” @Kay 这似乎不相关。请参阅this github issue 和此other answer。【参考方案3】:这对我有用。之前安装插件,然后继续启动elasticsearch。
elasticsearch:
image: elasticsearch
command:
- sh
- -c
- "plugin list | grep -q plugin_name || plugin install plugin_name;
/docker-entrypoint.sh elasticsearch"
【讨论】:
【参考方案4】: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"
【讨论】:
在docker compose上试过可以确认这个工作【参考方案5】:如果您使用来自sebp/elk
的ELK
堆栈
你需要设置你的Dockerfile
像
FROM sebp/elk
ENV ES_HOME /opt/elasticsearch
WORKDIR $ES_HOME
RUN yes | CONF_DIR=/etc/elasticsearch gosu elasticsearch bin/elasticsearch-plugin \
install -b mapper-attachments
如在https://elk-docker.readthedocs.io/#installing-elasticsearch-plugins 上看到的那样。
它也应该只适用于 Elastic Search。
【讨论】:
【参考方案6】:Elasticsearch v6.8.15 的示例。
为简单起见,我们将使用docker-compose.yml
和Dockerfile
。
Dockerfile
的内容:
FROM docker.elastic.co/elasticsearch/elasticsearch:6.8.15
RUN elasticsearch-plugin install analysis-icu
RUN elasticsearch-plugin install analysis-phonetic
还有内容docker-compose.yml
:
version: '2.2'
services:
elasticsearch:
#image: docker.elastic.co/elasticsearch/elasticsearch:6.8.15
build:
context: ./
dockerfile: Dockerfile
container_name: elasticsearch
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- http.cors.allow-headers=X-Requested-With,Content-Type,Content-Length,Authorization
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
- esplugins1:/usr/share/elasticsearch/plugins
ports:
- 9268:9200
networks:
- esnet
elasticsearch2:
#image: docker.elastic.co/elasticsearch/elasticsearch:6.8.15\
build:
context: ./
dockerfile: Dockerfile
container_name: elasticsearch2
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- http.cors.allow-headers=X-Requested-With,Content-Type,Content-Length,Authorization
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata2:/usr/share/elasticsearch/data
- esplugins2:/usr/share/elasticsearch/plugins
networks:
- esnet
volumes:
esdata1:
driver: local
esdata2:
driver: local
esplugins1:
driver: local
esplugins2:
driver: local
networks:
esnet:
这是来自 Elasticsearch 网站本身 https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docker.html#docker-cli-run-prod-mode 的默认 Elasticsearch 6.8.15 docker-compose.yml
文件。我为其中两个节点添加了两个named data volumes
、esplugins1
和esplugins2
。所以这些插件可以在docker-compose down
之间持久化。
注意,如果您曾经运行过docker-compose down -v
,那么这些卷将被删除!
我注释掉了image
行并将该图像移至Dockerfile
。然后使用RUN
命令添加elasticsearch-plugin
安装命令。这个 elasticsearch-plugin
命令在 elasticsearch 容器中本机可用。一旦进入容器外壳,您就可以检查这一点。
【讨论】:
以上是关于如何使用 docker compose 安装 ElasticSearch 插件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 docker compose 安装 ElasticSearch 插件
(Docker)如何在 WordPress 容器中使用单独的 Composer 容器安装依赖项?