运行 在 docker 容器中的主要服务完全加载后的 bash 脚本
Run a bash script after the primary service in a docker container is fully loaded
我正在使用 this docker repository 安装 elasticsearch
和 searchguard
elasticsearch 完全加载后,searchguard 需要 运行 脚本 bin/init_sg.sh
。
我不喜欢 运行 docker exec -it elasticsearch bin/init_sg.sh
每次重新创建容器时都手动进行。我正在寻找一种在 Dockerfile
或 docker-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
检查进程似乎不是检查 elastic-search 是否准备就绪的好方法。
我建议使用 elastic-search 的 REST api 更好的替代方法。
api 在端口 9200
上公开。弹性搜索有一个official healthcheck script。健康检查使用命令 curl -fsSL "http://$host:9200/_cat/health?h=status
如果 elastic-search 健康,它将 return 绿色。
您可以使用相同的 api 并等待绿色状态,然后执行您的 init_sg.sh
脚本。
我正在使用 this docker repository 安装 elasticsearch
和 searchguard
elasticsearch 完全加载后,searchguard 需要 运行 脚本 bin/init_sg.sh
。
我不喜欢 运行 docker exec -it elasticsearch bin/init_sg.sh
每次重新创建容器时都手动进行。我正在寻找一种在 Dockerfile
或 docker-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
检查进程似乎不是检查 elastic-search 是否准备就绪的好方法。
我建议使用 elastic-search 的 REST api 更好的替代方法。
api 在端口 9200
上公开。弹性搜索有一个official healthcheck script。健康检查使用命令 curl -fsSL "http://$host:9200/_cat/health?h=status
如果 elastic-search 健康,它将 return 绿色。
您可以使用相同的 api 并等待绿色状态,然后执行您的 init_sg.sh
脚本。