https://hub.docker.com/_/kibana
In the given example, Kibana will a attach to a user defined network (useful for connecting to other services (e.g. Elasticsearch)). If network has not yet been created, this can be done with the following command:
$ docker network create somenetwork
docker pull kibana:8.19.5
docker pull kibana:7.17.29
Note: In this example, Kibana is using the default configuration and expects to connect to a running Elasticsearch instance at http://localhost:9200
Run Kibana
$ docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:tag
Kibana can be accessed by browser via http://localhost:5601 or http://host-ip:5601

在Docker中部署Kibana需与Elasticsearch集群协同工作,重点关注版本兼容性、安全认证、网络配置。以下是详细步骤和最佳实践:
- 基础部署(与Elasticsearch单节点集成)
1.1 拉取官方镜像
bash
docker pull docker.elastic.co/kibana/kibana:8.12.0 # 必须与Elasticsearch版本一致
1.2 运行Kibana容器
bash
docker run -d \
--name kibana \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS='["http://elasticsearch:9200"]' \ # 指向Elasticsearch容器名或IP
-e ELASTICSEARCH_USERNAME='elastic' \ # Elasticsearch认证用户
-e ELASTICSEARCH_PASSWORD='ABC123xyz...' \ # Elasticsearch密码(从日志获取)
--restart=always \
--network elastic-net \ # 与Elasticsearch同一网络(若使用自定义网络)
docker.elastic.co/kibana/kibana:8.12.0
关键参数说明:
-p 5601:5601:Kibana Web界面端口
ELASTICSEARCH_HOSTS:Elasticsearch连接地址(支持数组格式,可配置多个节点)
ELASTICSEARCH_USERNAME/PASSWORD:Elasticsearch的认证信息(8.x默认启用安全)
–network:推荐与Elasticsearch加入同一Docker网络(如elastic-net),避免暴露端口到宿主机
- 高级配置(生产环境优化)
2.1 通过配置文件自定义
创建kibana.yml配置文件(宿主机):
yaml
# /data/kibana/config/kibana.yml
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elasticsearch:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "ABC123xyz..."
i18n.locale: "zh-CN" # 中文界面
monitoring.ui.container.elasticsearch.enabled: true # 监控Elasticsearch
运行容器时挂载配置文件:
bash
docker run -d \
--name kibana \
-p 5601:5601 \
-v /data/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
--network elastic-net \
docker.elastic.co/kibana/kibana:8.12.0
2.2 启用HTTPS(通过Nginx反向代理)
生成SSL证书(示例使用自签名证书):
bash
mkdir -p /data/kibana/certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /data/kibana/certs/kibana.key \
-out /data/kibana/certs/kibana.crt
配置Nginx反向代理:
nginx
server {
listen 443 ssl;
server_name kibana.example.com;
ssl_certificate /data/kibana/certs/kibana.crt;
ssl_certificate_key /data/kibana/certs/kibana.key;
location / {
proxy_pass http://kibana:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
修改Kibana配置:
yaml
# kibana.yml
server.ssl.enabled: true
server.ssl.certificate: /usr/share/kibana/config/certs/kibana.crt
server.ssl.key: /usr/share/kibana/config/certs/kibana.key
- 验证部署
访问Kibana界面:
浏览器打开 http://localhost:5601(或自定义域名)
输入Elasticsearch用户名(如elastic)和密码登录
检查日志:`asp
bash
docker logs kibana
正常启动应看到类似日志:
"status":"green","message":"Connection successful"
4. 关键注意事项
版本兼容性:
Kibana与Elasticsearch版本必须严格一致(如均使用8.12.0),否则无法连接。
安全认证:
Elasticsearch 8.x默认启用安全,Kibana必须配置ELASTICSEARCH_USERNAME/PASSWORD。
生产环境建议通过角色管理(如kibana_system用户)限制权限:
```asp
bash
# 在Elasticsearch容器中创建专用用户
bin/elasticsearch-users useradd kibana_system -p StrongPassword -r kibana_system
然后在Kibana配置中使用该用户:
yaml
elasticsearch.username: "kibana_system"
elasticsearch.password: "StrongPassword"
跨主机部署:
若Elasticsearch和Kibana不在同一Docker主机,需:
修改ELASTICSEARCH_HOSTS为Elasticsearch的宿主机IP或域名(如http://192.168.1.100:9200)。
确保Elasticsearch的network.host配置为0.0.0.0或具体IP。
性能优化:
调整Kibana的JVM内存(通过环境变量NODE_OPTIONS):
bash
-e NODE_OPTIONS="--max-old-space-size=2048" # 限制最大内存为2GB
- 常用管理命令
停止容器:docker stop kibana
删除容器:docker rm -f kibana
备份配置:备份/data/kibana/config/kibana.yml和证书文件
- 完整示例(生产级部署)
bash
# 创建目录结构
mkdir -p /data/kibana/{config,certs,data}
# 生成证书(生产环境使用CA签名证书)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /data/kibana/certs/kibana.key \
-out /data/kibana/certs/kibana.crt \
-subj "/CN=kibana.example.com"
# 创建kibana.yml
cat > /data/kibana/config/kibana.yml <<EOF
server.host: "0.0.0.0"
server.ssl.enabled: true
server.ssl.certificate: "/usr/share/kibana/config/certs/kibana.crt"
server.ssl.key: "/usr/share/kibana/config/certs/kibana.key"
elasticsearch.hosts: ["https://elasticsearch:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "StrongPassword"
i18n.locale: "zh-CN"
monitoring.ui.container.elasticsearch.enabled: true
EOF
# 运行Kibana
docker run -d \
--name kibana \
-p 5601:5601 \
-v /data/kibana/config:/usr/share/kibana/config \
-v /data/kibana/certs:/usr/share/kibana/config/certs \
-e NODE_OPTIONS="--max-old-space-size=2048" \
--network elastic-net \
--restart=always \
docker.elastic.co/kibana/kibana:8.12.0