安装elasticsearch
- 拉取 Elasticsearch镜像(注意需要翻墙)
docker pull elasticsearch:7.14.1
- 创建 network
docker network create elastic
Docker 支持多种网络模式,默认使用 bridge
网络(通过 docker0
虚拟网卡实现容器间通信)。但在复杂场景下,默认网络存在以下问题:
- 容器名不可直接访问:默认网络中,容器只能通过 IP 地址互相访问,难以记忆和维护。
- 隔离性不足:所有容器共享同一个 bridge 网络,存在命名冲突和安全风险。
--net elastic
表示将容器加入名为 elastic
的自定义网络,主要目的是:
容器间通过名称互访:在 elastic
网络中,容器可以直接通过容器名(如 elasticsearch
)访问其他容器,无需手动解析 IP 地址。
- Kibana 容器可以直接通过
http://elasticsearch:9200
连接 Elasticsearch - 服务发现更加简单(通过 DNS 自动解析容器名到 IP)
# 可以看到 elastic 网络正常创建了 docker network ls NETWORK ID NAME DRIVER SCOPE 00e36aa513ea bridge bridge local f9a92ae19143 elastic bridge local fda20d52a9ae host host local 36a3c054b09c none null local
- 运行容器
docker run -d \ --name es \ --net elastic \ -e "ES_JAVA_0PTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -v /Users/xxx/Documents/elasticsearch/data:/usr/share/elasticsearch/data \ -v /Users/xxx/Documents/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -v /Users/xxx/Documents/elasticsearch/logs:/usr/share/elasticsearch/logs \ --privileged \ -p 9200:9200 \ -p 9300:9300 \ elasticsearch:7.14.1
- Elasticsearch 设置密码
# 容器启动以后,我们用下面命令进入容器 Mac-mini ~ % docker exec -it f02c5b21b360 /bin/bash # 进入容器以后 修改config下面的 elasticsearch.yml文件。 [root@f02c5b21b360 elasticsearch]# ls bin config data jdk lib LICENSE.txt logs modules NOTICE.txt plugins README.asciidoc [root@f02c5b21b360 elasticsearch]# cd config [root@f02c5b21b360 config]# ls elasticsearch.keystore elasticsearch.yml jvm.options jvm.options.d log4j2.file.properties log4j2.properties role_mapping.yml roles.yml users users_roles [root@f02c5b21b360 config]# vi elasticsearch.yml
在文件中添加如下内容
## 配置xpack,开启加密 xpack.security.enabled: true xpack.license.self_generated.type: basic xpack.security.transport.ssl.enabled: true ## elasticsearch-head配置需要添加此配置 http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

保存退出,执行bin目录下面的elasticsearch-setup-password文件,设定密码
[root@f02c5b21b360 elasticsearch]# ls bin config data jdk lib LICENSE.txt logs modules NOTICE.txt plugins README.asciidoc [root@f02c5b21b360 elasticsearch]# cd bin [root@f02c5b21b360 bin]# ls elasticsearch elasticsearch-cli elasticsearch-env-from-file elasticsearch-migrate elasticsearch-saml-metadata elasticsearch-shard elasticsearch-syskeygen x-pack-security-env elasticsearch-certgen elasticsearch-croneval elasticsearch-geoip elasticsearch-node elasticsearch-service-tokens elasticsearch-sql-cli elasticsearch-users x-pack-watcher-env elasticsearch-certutil elasticsearch-env elasticsearch-keystore elasticsearch-plugin elasticsearch-setup-passwords elasticsearch-sql-cli-7.14.1.jar x-pack-env [root@f02c5b21b360 bin]# ./elasticsearch-setup-passwords interactive
这里会设置六个账号的密码:elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user

- 重启容器,然后访问 http://localhost:9200
可以看到需要用户名和密码才能访问了

输入用户名和密码 成功登录进去就说明es已配置完成

安装 kibana
- 拉取 kibana镜像(注意需要翻墙)
‼️ kibana版本号要和elasticsearch一致(非常重要,否则 kibana启动时会报错,提示和elasticsearch版本号不一致)这里都是用的 7.14.1
docker pull kibana:7.14.1
- 运行容器
ELASTICSEARCH_HOSTS指向elasticsearch url ,注意–net elastic
docker run -d \ --name kibana \ --net elastic \ -e ELASTICSEARCH_HOSTS=http://es:9200 \ -p 5601:5601 \ kibana:7.14.1
- 设定用户名和密码,以连接Elasticsearch
修改 config\kibana.yml文件
# 通过容器id 进入kibana容器 Mac-mini ~ % docker exec -it db21974d8467 /bin/bash # 进入容器以后,修改config下面的kibana.yml文件 bash-4.4$ ls LICENSE.txt NOTICE.txt README.txt bin config data node node_modules package.json plugins src x-pack bash-4.4$ cd config bash-4.4$ ls kibana.yml node.options bash-4.4$ vi kibana.yml
在文件中添加
xpack.security.enabled: true elasticsearch.username: "elastic" elasticsearch.password: "xxxx" # elasticsearch中设定的密码

保存退出,重启 kibana 容器。
- 访问 http://localhost:5601
可以看到需要用户名和密码才能访问

输入elasticsearch中设定用户名和密码,Login in

启动以后,做完frp内网穿透,就可以在公网用public ip访问 kibana dashboard了。

发现提示了下面的问题
server.publicBaseUrl is missing and should be configured when running in a production environment. Some features may not behave correctly.
你看到的这个警告是 Kibana 在生产环境下的安全提示,提示你缺少 server.publicBaseUrl
配置。这个配置项对 Kibana 的正确运行非常重要,特别是在涉及 URL 生成、重定向和安全功能时。
为什么需要 server.publicBaseUrl
?
- URL 生成:Kibana 在生成链接(如邮件通知、深层链接)时,需要知道外部访问的基础 URL。
- 代理环境适配:如果 Kibana 运行在反向代理(如 Nginx)后面,Kibana 需要知道代理后的公开 URL。
- 安全功能:某些安全功能(如 OAuth 回调、CSRF 保护)依赖于正确的基础 URL。
缺少配置的影响
- 部分功能可能无法正常工作(如告警通知中的链接错误)。
- 安全漏洞风险(如开放重定向攻击)。
- 用户体验问题(如点击链接跳转到错误地址)。
解决 kibana.yml
中添加配置(推荐)
server.publicBaseUrl: "https://kibana.example.com" # 替换为你的实际域名或 IP
# 进入kibana docker容器 Mac-mini ~ % docker exec -it db21974d8467 /bin/bash # 编辑 bash-4.4$ ls LICENSE.txt NOTICE.txt README.txt bin config data node node_modules package.json plugins src x-pack bash-4.4$ cd config bash-4.4$ ls kibana.yml node.options bash-4.4$ vi kibana.yml
# kibana.yml 文件 # # ** THIS IS AN AUTO-GENERATED FILE ** # # Default Kibana configuration for docker target server.host: "0" server.shutdownTimeout: "5s" elasticsearch.hosts: [ "http://elasticsearch:9200" ] monitoring.ui.container.elasticsearch.enabled: true xpack.security.enabled: true elasticsearch.username: "elastic" #这里替换成实际的用户名 elasticsearch.password: "xxxxxx" #这里替换成实际的密码 server.publicBaseUrl: "http://xxx.xxx.xx.xx:5601" #这里替换kibana dashboard的ip域名和端口 ~
修改完保存以后,重启容器。
kibana 汉化
按照上面操作以后, 发现kibana dashboard是英文画面,我们可以通过修改设置,改成中文。
kibana 6.7 版本之后,官方已经支持语言选择,只需修改kibana.yml文件即可。
只要在 config/ kibana.yml 添加 i18n.locale: “zh-CN” 即可
# # ** THIS IS AN AUTO-GENERATED FILE ** # # Default Kibana configuration for docker target server.host: "0" server.shutdownTimeout: "5s" elasticsearch.hosts: [ "http://elasticsearch:9200" ] monitoring.ui.container.elasticsearch.enabled: true xpack.security.enabled: true elasticsearch.username: "elastic" elasticsearch.password: "xxxx" server.publicBaseUrl: "http://xxx.xxx.xxx.xxx:5601" i18n.locale: "zh-CN" ~ ~ ~ ~
保存退出,重启容器,重新访问dashboard页面,可以发现页面变成中文了。
