首页 > 解决方案 > elasticsearch启动并在docker中运行后,如何运行searchguard设置脚本?

问题描述

我一直在尝试让 searchguard 设置脚本在 elasticsearchinit_sg.sh之后自动运行。我不想手动使用docker exec. 这是我尝试过的。

入口点.sh:

#! /bin/sh
elasticsearch
source init_sg.sh

Dockerfile:

FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.0

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-6:6.1.0-20.1 \
    && chmod +x \
        plugins/search-guard-6/tools/hash.sh \
        plugins/search-guard-6/tools/sgadmin.sh \
    && chown -R elasticsearch config/sg/ \
    && chmod -R go= config/sg/


#  This custom entrypoint script is used instead of 
# the original's /usr/local/bin/docker-entrypoint.sh

ENTRYPOINT ["bash","-c","entrypoint.sh"]

但是,它会抛出cannot run elasticsearch as root error

org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

所以我想我不能直接在中运行entrypoint.shelasticsearch,这很令人困惑,因为当Dockerfile是这样的时候没有问题:

FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.0

COPY config/ config/
COPY bin/ bin/
....
CMD ["elasticsearch"]

线程接受的答案不起作用。容器中没有“/run/entrypoint.sh”。

解决方案

最后我设法完成了。这是我的自定义入口点脚本,它将自动运行 searchguard 设置脚本:

source init_sg.sh

while [ $? -ne 0 ]; do
   sleep 10
   source init_sg.sh
done &

/bin/bash -c "source /usr/local/bin/docker-entrypoint.sh;"

如果您有任何替代解决方案,请随时回答。

标签: dockerelasticsearchdockerfilesearch-guard

解决方案


推荐阅读