在docker容器中的主服务完全加载后运行bash脚本

时间:2017-11-19 08:09:15

标签: bash docker docker-compose dockerfile

我正在使用this docker repository来安装elasticsearchsearchguard

在弹性搜索完全加载后,Searchguard需要运行脚本bin/init_sg.sh

每次重新创建容器时,我都不喜欢手动运行docker exec -it elasticsearch bin/init_sg.sh。我正在寻找一种在Dockerfiledocker-compose.yml中以编程方式执行此操作的方法。

我现在的主要问题是在dockerfile中找到主进程pid并确保elasticsearch服务已完全加载。谁能给我建议怎么做?

Dockerfile不成功

FROM docker.elastic.co/elasticsearch/elasticsearch:5.6.3

COPY config/ config/
COPY bin/ bin/

# Search Guard plugin
# https://github.com/floragunncom/search-guard/wiki
RUN elasticsearch-plugin install --batch com.floragunn:search-guard-5:5.6.3-16 \
    && chmod +x \
        plugins/search-guard-5/tools/hash.sh \
        plugins/search-guard-5/tools/sgadmin.sh

# Add your elasticsearch plugins setup here
# Example: RUN elasticsearch-plugin install analysis-icu

CMD bin/elasticsearch && while [ -d /proc/1 ] ; do sleep 1; done && bin/init_sg.sh

1 个答案:

答案 0 :(得分:2)

检查过程似乎不是检查弹性搜索是否准备就绪的好方法。

我建议使用弹性搜索的REST api更好的替代方案。

api在端口9200上公开。弹性搜索有official healthcheck script。运行状况检查使用命令curl -fsSL "http://$host:9200/_cat/health?h=status,如果弹性搜索是健康的,它将返回绿色。

您可以使用相同的api并等待绿色状态,然后执行init_sg.sh脚本。