我正在做一个使用弹性堆栈,elasticsearch logstash和kibana的项目。现在的目标是使用docker来运行堆栈。基于这个https://github.com/deviantony/docker-elk,我将docker-compose配置为使用我自己的解析来运行我自己的管道。
我面临的问题是自动配置(创建索引模板和/或索引)。我知道我调用curl来做API调用,经过搜索我发现了入口点-XPUT脚本,我尝试从官方镜像复制脚本,并在其中添加我的curl API调用,但不起作用。因此,我的下一个反射是打开CLI并输入我的curl调用,它工作得很好。
所以我的问题是,我如何在容器启动时自动运行我的API调用,我对docker和弹性堆栈非常陌生。
谢谢!
编辑:
因此,我在Dockerfile上使用RUN命令安装了一个基本的bash镜像和curl。
现在我有一个让服务通信的问题(我把它们都放在同一个网络中),我可能做错了,所以我得到了:
curl: (7) Failed to connect to localhost port 9200: Connection refused编辑:
更新了我的脚本,在不暴露端口的情况下调用elasticsearch:9200,现在它工作得很好!
我还认为,脚本并没有等待elasticsearch完成执行脚本。
这是我的docker-compose文件:
version: '3.2'
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
# Use single node discovery in order to disable production mode and avoid bootstrap checks.
# see: https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
discovery.type: single-node
networks:
- elk
configurator:
build:
context: configurator/
networks:
- elk
depends_on:
- elasticsearch
logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./logstash/config
target: /usr/share/logstash/config
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
- type: bind
source: ./logstash/data
target: /usr/share/logstash/data
ports:
- "5044:5044"
- "5000:5000/tcp"
- "5000:5000/udp"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- configurator
kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./kibana/config/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
ports:
- "5601:5601"
networks:
- elk
depends_on:
- configurator
networks:
elk:
driver: bridge
volumes:
elasticsearch:发布于 2020-12-17 04:13:32
创建一个新的手工docker镜像(或使用良好的启动镜像),将您需要在启动时发出的API调用添加到启动脚本中。确保它验证是否需要执行这些调用,或者上一次运行已经完成了所有操作。
接下来,将图像添加到您的compse中,并使其依赖于带有depends_on选项的elasticsearch服务。这将确保您的集群在启动“init容器”之前正在运行。
现在,在启动时,将启动所需的服务(如果尚未运行),然后启动init容器。
可选:使init容器在默认情况下不启动,但仅在显式启动时启动。例如,看一下监视器服务和启用x的选项here
将healthchecks添加到服务中是一个很好的做法。如果您不这样做,docker将仅通过容器状态(running=healthly)来假定服务健康。但是elasticsearch有一个更长的引导过程,我们需要等待。
将以下内容添加到elasticsearch:
healthcheck:
test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
interval: 30s
timeout: 30s
retries: 5并将此代码添加到配置器服务中:
depends_on:
elasticsearch:
condition: service_healthyhttps://stackoverflow.com/questions/65325744
复制相似问题