使用docker部署es和kibana遇到的坑
docker容器部署ES和kibana需要注意的点:
1、es和kibana的镜像版本必须一致。我这次用的是7.7.1版本
2、es非常占用内存,因此在创建容器的时候一定要控制es使用的内存
kibana的汉化:
在7.7.1版本的kibana中已经存在了汉化补丁,我们只需要在配kibana的置文件中添加信息即可:
问题描述:
我在配置kibana.yml的配置文件中加入
**i18n.locale: “zh-CN”**了一行。
但是当我保存重启kibana容器的时候,容器启动没多久就会自动断开。
通过查看日志显示如下:
FATAL CLI ERROR YAMLException: can not read a block mapping entry; a multiline key may not be an implicit key at line 11, column 1:
^
at generateError (/usr/share/kibana/node_modules/js-yaml/lib/js-yaml/loader.js:167:10)
at throwError (/usr/share/kibana/node_modules/js-yaml/lib/js-yaml/loader.js:173:9)
at readBlockMapping (/usr/share/kibana/node_modules/js-yaml/lib/js-yaml/loader.js:1073:9)
at composeNode (/usr/share/kibana/node_modules/js-yaml/lib/js-yaml/loader.js:1359:12)
at readDocument (/usr/share/kibana/node_modules/js-yaml/lib/js-yaml/loader.js:1519:3)
at loadDocuments (/usr/share/kibana/node_modules/js-yaml/lib/js-yaml/loader.js:1575:5)
at load (/usr/share/kibana/node_modules/js-yaml/lib/js-yaml/loader.js:1596:19)
at safeLoad (/usr/share/kibana/node_modules/js-yaml/lib/js-yaml/loader.js:1618:10)
at readYaml (/usr/share/kibana/src/core/server/config/read_config.js:34:47)
at getConfigFromFiles (/usr/share/kibana/src/core/server/config/read_config.js:66:18)
at RawConfigService.loadConfig (/usr/share/kibana/src/core/server/config/raw_config_service.js:51:70)
at bootstrap (/usr/share/kibana/src/core/server/bootstrap.js:61:20)
at Command.<anonymous> (/usr/share/kibana/src/cli/serve/serve.js:195:33)
at Command.<anonymous> (/usr/share/kibana/src/cli/command.js:111:20)
at Command.listener (/usr/share/kibana/node_modules/commander/index.js:291:8)
at Command.emit (events.js:198:13)
FATAL CLI ERROR YAMLException: can not read a block mapping entry; a multiline key may not be an implicit key at line 11, column 1:
原因分析:
经过查资料分析,判断是在kibana.yml配置文件加入的那一行中:后面少了一个空格。类似于下图:
解决方案:
其实问题很简单,我们只有重新进入容器修改配置文件,但是问题来了,kibana容器每次刚启动没几秒钟,就会自动断开,根本来不及修改。
如何在容器无法启动的情况下修改里面的配置文件?
最终我是通过笨办法,在容器启动的瞬间
docker cp kibana.yml k7:/usr/share/kibana/config/kibana.yml
把里面的配置文件替换的办法,把错误的kibana.yml文件替换掉的。
替换后,容器就可以正常启动启动了,而且页面也被汉化了。
时隔半个月再回过头来看,其实那种方法真的很笨。如果启动不了可以直接删除删除容器,重新创建很简单的事情。在创建的时候可以做数据持久化,创建数据卷,将配置文件挂载到宿主机上,这样修改配置就十分方便。
数据持久换的两种方式:
一:创建数据卷,这种挂载的方式是直接将容器的指定目录挂载到宿主机,但是这中挂载无法指定挂载到宿主机的位置。
二:bind的挂载,可以任意挂载到宿主机的任意位置。