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

我正在使用这个docker库来安装searchguardsearchguard

searchguard需要在弹性search完全加载后运行脚本bin/init_sg.sh

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

我现在的主要问题是finddockerfile中的主进程pid,并确保elasticsearch服务已完全加载。 任何人都可以给我build议如何做到这一点?

不成功的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 

检查过程似乎不是检查弹性search是否准备好的好方法。

我build议使用弹性search的REST api更好的select。

api暴露在9200端口上。 有一个用于弹性search的官方healthcheck脚本 。 运行状况检查使用命令curl -fsSL "http://$host:9200/_cat/health?h=status ,如果弹性search健康,将返回绿色。

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