docker - 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.sh
elasticsearch,这很令人困惑,因为当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;"
如果您有任何替代解决方案,请随时回答。
解决方案
推荐阅读
- error-handling - Sequelize 模型重复值检查
- postgresql - 将 csv 文件导入 Postgresql
- node.js - 如何让 Sails.js 应用程序监听以太坊区块链的事件以在持久层上执行 CRUD
- javascript - 为什么我的停止按钮在这个 javascript 音频播放器上不起作用?
- css - 使用 JSS 禁用 webkit-spinner
- r - R循环/lapply,按分组累积总计
- java - 为什么调用此 readFile 方法时出现错误?
- c++ - C++ 嵌套类相互引用
- java-8 - AEM 6.2 SP1 不支持 Java 8 Lambda 表达式。Java 8 的其余功能(例如 Stream)正在运行
- c# - Xamarin 将网格绑定到 ViewModel