我正在通过此处找到的 dockerfile 启动 elasticsearch:
https://index.docker.io/u/ehazlett/elasticsearch/
效果很好。我需要定义自己的主机,因为我的环境不支持任何类型的多播。
我了解我的选择是:
1)在 elasticsearch 运行时作为命令行参数提供主机
2)修改我的elasticsearch.yml文件来设置主机。
我知道如何构建 yml,我需要知道的是如何使用我自己的 yml 而不是容器中的 yml 通过 docker 启动 elasticsearch。这可能吗?
谢谢。
答案1
您可以使用“-Des.config”参数指定elasticsearch.yml。
例如:
elasticsearch -Des.config=/path/to/elasticsearch.yml
或者在你的 Dockerfile 中:
CMD ["/usr/share/elasticsearch/bin/elasticsearch", "-Des.config=/path/to/elasticsearch.yml"]
答案2
如果您正在使用docker-compose
,您可以volumes
在docker-compose.yml
文件中添加如下部分:
volumes:
- type: bind
source: ./elasticsearch/config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
该elasticsearch
部分看起来如下:
services:
elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./elasticsearch/config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch
target: /usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: changeme
networks:
- elk
答案3
为了将您自己的 elasticsearch 配置添加到您的容器中,您可以选择创建自定义图像。
创建自定义镜像非常简单,如果您熟悉 Dockerfile,则只需要做几件事:
FROM base/elasticsearchimage
ADD elasticsearch.yml /path/to/conf/elasticsearch.yml
CMD ["/usr/share/elasticsearch/bin/elasticsearch", "-Des.config=/path/to/conf/elasticsearch.yml"]
将 Dockerfile 和 elasticsearch.yml 放在同一文件夹中并运行以下命令:
在 Linux 上:
sudo docker build -t username/elasticsearch.
Windows(通过 boot2docker):
docker build -t username/elasticsearch .
构建成功后执行以下操作:
docker run -d --name containername username/elasticsearch
这样,您将使配置始终可用于新容器,从而减少创建集群的工作量。
答案4
将自定义的yml文件复制到Dockerfile中的ES的config目录中,并将yml文件与Dockerfile放在同一目录中并构建镜像
FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2
COPY --chown=elasticsearch:elasticsearch ./elasticsearch.yml /usr/share/elasticsearch/config/
更多内容这里