使用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 连接远程es kibana无法连接es_kibana 连接远程es

解决方案:

其实问题很简单,我们只有重新进入容器修改配置文件,但是问题来了,kibana容器每次刚启动没几秒钟,就会自动断开,根本来不及修改。
如何在容器无法启动的情况下修改里面的配置文件?

最终我是通过笨办法,在容器启动的瞬间

docker cp kibana.yml k7:/usr/share/kibana/config/kibana.yml

把里面的配置文件替换的办法,把错误的kibana.yml文件替换掉的。

替换后,容器就可以正常启动启动了,而且页面也被汉化了。

时隔半个月再回过头来看,其实那种方法真的很笨。如果启动不了可以直接删除删除容器,重新创建很简单的事情。在创建的时候可以做数据持久化,创建数据卷,将配置文件挂载到宿主机上,这样修改配置就十分方便。
数据持久换的两种方式:
一:创建数据卷,这种挂载的方式是直接将容器的指定目录挂载到宿主机,但是这中挂载无法指定挂载到宿主机的位置。
二:bind的挂载,可以任意挂载到宿主机的任意位置。