docker 如何在logstash容器启动时给一个默认的keystore?

   背景: 当前项目中的logstash使用docker 容器启动,因为客户要求要把配置文件中的数据库的密码用加密后的字符串代替,考虑到logstash已有的加密方案,使用keystore 将字符串加密到对应的文件中 配置文件中的密码则用变量代替

image.png

现在有一个问题就是 我无法在初始化启动的时候很好的给logstash 加入这个bim的变量

原因 : 容器第一次启动时,logstash中是没有这个${bim}的且我也没有找到如何在初始化时就给logstash 内置这个变量,且容器启动时需要初始化keystore

# 初始化keystore 我在镜像制作的过程中做了这一步
./bin/logstash-keystore create

 添加变量
./bin/logstash-keystore add bim

我现在的方案就是在容器第一次启动时 通过shell脚本去添加这个变量

docker exec -it logstash bin/logstash-keystore add bim

image.png

出现上述的一行(Enter value for BIM_PASS:)的时候就快速的去输入对应库的密码 并敲回车

这样做有一个弊端就是,容器初始化的时候是没有bim这个变量 但是我配置文件中又写了的

且手动添加这变量的过程需要去调用java的api 且速度很慢,容器启动过程中会一直去内存中读取

对应的变量,如果没有读取到 会在大概40秒左右的时候超时 而这个时候如果上面的脚本还没有加载

完毕 容器就会重启

那么用户就会重新来执行一遍docker exec -it logstash bin/logstash-keystore add BIM_PASS

这样的体验很不好 请问各位大佬 有什么可以改进的吗?

直接在镜像制作的过程中使用非交互式的方式 指定一个默认值?

阅读 2.1k
1 个回答

想到一个方法,在创建这个容器之前,提前准备好logstash.keystore文件,然后在适当的时候把这个文件放到容器里面(可以在构建镜像的时候加进去)

这样,在容器内就不需要再使用logstash-keystore add添加了,这样做可以直接在容器内部使用密码。

只要在启动logstash容器的时候,把logstash.keystore的密码传进去,传一个LOGSTASH_KEYSTORE_PASS环境变量。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题