【问题标题】:Run a bash script after the primary service in a docker container is fully loaded在 docker 容器中的主要服务完全加载后运行 bash 脚本
【发布时间】:2023-03-19 15:52:02
【问题描述】:

我正在使用this docker repository 安装elasticsearchsearchguard

searchguard 需要在 elasticsearch 完全加载后运行脚本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

【问题讨论】:

    标签: bash docker docker-compose dockerfile search-guard


    【解决方案1】:

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

    我建议使用弹性搜索的 REST api 更好的选择。

    api 暴露在端口9200 上。有一个 official healthcheck script 用于弹性搜索。运行状况检查使用命令curl -fsSL "http://$host:9200/_cat/health?h=status,如果 elastic-search 运行良好,该命令将返回绿色。

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

    【讨论】:

    • 最好检查 9200 端口是否打开(例如使用 nc),因为 REST api 受到限制,只要未初始化 searchguard,您就无法登录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2017-02-21
    • 2017-12-01
    • 2022-11-26
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多