Elasticsearch Docker 容器启动报错排查
tElasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.2
container_name: tElasticsearch
environment:
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
- http.cors.enabled=true
- http.cors.allow-origin=*
- "xpack.security.enabled=true"
- "xpack.security.transport.ssl.enabled=false"
- "ELASTIC_PASSWORD=P4wLpETyQ76zQikBBWyI"
volumes:
- /home/thought/data/elasticsearch:/usr/share/elasticsearch/data
- /home/thought/plugin/elasticsearch:/usr/share/elasticsearch/plugins
- /home/thought/etc/elasticsearch/config:/usr/share/elasticsearch/config
ports:
- 9200:9200
- 9300:9300
networks:
- common-network
将本地目录/home/thought/data/elasticsearch映射到容器内的/usr/share/elasticsearch/data目录。Elasticsearch容器默认以elasticsearch用户(非root)启动,因此该用户需对数据目录有写权限,否则会报AccessDeniedException,无法获取锁定文件node.lock。
请尝试以下步骤来解决问题:
- 确保宿主机上的数据目录有正确的权限和属主:
在宿主机执行:
bash
sudo chown -R 1000:1000 /home/thought/data/elasticsearch
sudo chmod -R 775 /home/thought/data/elasticsearch
(1000:1000是elasticsearch镜像中elasticsearch用户的默认UID:GID)
执行完后,重新启动容器。
- 检查是否存在遗留的
node.lock文件:
如果之前有失败的启动尝试导致node.lock文件残留,可以在宿主机下删除对应数据目录中的node.lock文件,然后再重新启动。
bash
rm /home/thought/data/elasticsearch/nodes/0/node.lock
- 确认没有其他Elasticsearch实例使用相同的数据目录:
如果你需要多节点,请给每个节点指定独立的数据目录或者在elasticsearch.yml中增加node.max_local_storage_nodes的数量。
通常,第一步(修正权限)即可解决大多数该类问题。
docker exec -it tElasticsearch /bin/bash
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto --batch
root@cbb698e9e7df:/usr/share/elasticsearch# /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto --batch
Changed password for user apm_system
PASSWORD apm_system = zBTVfDL1oljE1jjo3hwT
Changed password for user kibana_system
PASSWORD kibana_system = OO8zVppcuV0cLNpOyYz1
Changed password for user kibana
PASSWORD kibana = OO8zVppcuV0cLNpOyYz1
Changed password for user logstash_system
PASSWORD logstash_system = 4kv1D52l8IWjaJ0PxHGA
Changed password for user beats_system
PASSWORD beats_system = cJfAzJFsqS89gpWCLFUr
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = uVWJ44iJTGjd1A8Jab7e
Changed password for user elastic
PASSWORD elastic = llj94deAHXkD66oesW1D
curl -X POST "http://tElasticsearch:9200/_security/user/elastic/_password" \
-H "Content-Type: application/json" \
-u elastic:现有的正确密码 \
-d '{"password": "P4wLpETyQ76zQikBBWyI"}'
License:
CC BY 4.0