我想使用 docker-compose 运行 elasticsearch 和 kibana。 这是我的 docker-compose.yml,我使用 docker-compose --env-file dev.env up 运行
Docker 组合
version: '3.1'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.1.1
container_name: elasticsearch
environment:
- cluster.name=elasticsearch-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
- xpack.security.enrollment.enabled=true
- ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
- ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
networks:
- esnet
kibana:
image: docker.elastic.co/kibana/kibana:8.1.1
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=${ELASTICSEARCH_HOSTS}
- ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
- ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}
- xpack.security.enabled=true
depends_on:
- elasticsearch
ports:
- "5601:5601"
networks:
- esnet
volumes:
esdata:
driver: local
postgres-data:
driver: local
networks:
esnet:
堆栈跟踪
Error: [config validation of [elasticsearch].username]: value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function. Use a service account token instead
我设法为用户 elastic/kibana 创建服务帐户令牌,但如何将其设置为 docker-compose?我应该使用特定的环境变量吗? 或者有没有办法让它在不使用服务帐户的情况下工作?
我偶然发现了同样的问题,并尝试使用
kibana_admin
和 kibana_system
内置用户,但这也不起作用。也许您可以为这些用户设置密码,但我无法做到。
elastic
用户角色不允许拥有 Kibana 所需的 system-index write-access
。这是基于 Elastic 的更改(Pullrequest 的链接)。
您应该使用服务帐户的文档中所述的服务帐户。 显然,根据有关创建服务帐户令牌的docs,您必须以某种方式创建 Elasticsearch 容器并在启动 Kibana 容器之前创建令牌。 Elasticsearch forums 上也对此进行了讨论。
降级并使用以前的 ELK 版本也是一种可能性,我就是这样做的,因为我只需要集群进行本地开发。
我设法在我的 docker-compose 中为 Kibana 设置服务帐户令牌,如下所示:
version: '3.6'
services:
Elasticsearch:
image: elasticsearch:8.10.2
container_name: elasticsearch
restart: always
volumes:
- elastic_data:/usr/share/elasticsearch/data/
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
discovery.type: single-node
ELASTIC_PASSWORD: elastic123
ports:
- '9200:9200'
- '9300:9300'
networks:
- elk
Kibana:
image: kibana:8.10.2
container_name: kibana
restart: always
ports:
- '5601:5601'
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
- ELASTICSEARCH_SERVICEACCOUNTTOKEN=myToken
depends_on:
- Elasticsearch
networks:
- elk
volumes:
elastic_data: {}
networks:
elk:
我还使用此命令为 kibana 创建服务帐户令牌:
curl -X POST -u elastic:elastic123 "localhost:9200/_security/service/elastic/kibana/credential/token/token1?pretty"