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集群协同工作,重点关注版本兼容性、安全认证、网络配置。以下是详细步骤和最佳实践:

  1. 基础部署(与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),避免暴露端口到宿主机

  1. 高级配置(生产环境优化)
    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
  1. 验证部署
    访问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
  1. 常用管理命令

停止容器:docker stop kibana
删除容器:docker rm -f kibana
备份配置:备份/data/kibana/config/kibana.yml和证书文件
  1. 完整示例(生产级部署)
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
文档更新时间: 2025-11-02 14:31   作者:admin