我正在使用Docker Compose尝试使用docker的图像 elk-docker (https://elk-docker.readthedocs.io/)。 .yml文件是这样的:
elk:
image: sebp/elk
ports:
- "5601:5601"
- "9200:9200"
- "5044:5044"
当我运行命令:sudo docker-compose up时,控制台显示:
* Starting Elasticsearch Server
sysctl: setting key "vm.max_map_count": Read-only file system
...fail!
waiting for Elasticsearch to be up (1/30)
waiting for Elasticsearch to be up (2/30)
waiting for Elasticsearch to be up (3/30)
waiting for Elasticsearch to be up (4/30)
waiting for Elasticsearch to be up (5/30)
waiting for Elasticsearch to be up (6/30)
waiting for Elasticsearch to be up (7/30)
waiting for Elasticsearch to be up (8/30)
waiting for Elasticsearch to be up (9/30)
waiting for Elasticsearch to be up (10/30)
waiting for Elasticsearch to be up (11/30)
waiting for Elasticsearch to be up (12/30)
waiting for Elasticsearch to be up (13/30)
waiting for Elasticsearch to be up (14/30)
waiting for Elasticsearch to be up (15/30)
waiting for Elasticsearch to be up (16/30)
waiting for Elasticsearch to be up (17/30)
waiting for Elasticsearch to be up (18/30)
waiting for Elasticsearch to be up (19/30)
waiting for Elasticsearch to be up (20/30)
waiting for Elasticsearch to be up (21/30)
waiting for Elasticsearch to be up (22/30)
waiting for Elasticsearch to be up (23/30)
waiting for Elasticsearch to be up (24/30)
waiting for Elasticsearch to be up (25/30)
waiting for Elasticsearch to be up (26/30)
waiting for Elasticsearch to be up (27/30)
waiting for Elasticsearch to be up (28/30)
waiting for Elasticsearch to be up (29/30)
waiting for Elasticsearch to be up (30/30)
Couln't start Elasticsearch. Exiting.
Elasticsearch log follows below.
cat: /var/log/elasticsearch/elasticsearch.log: No such file or directory
docker_elk_1 exited with code 1
如何解决问题?
答案 0 :(得分:10)
您可能需要在主机本身的vm.max_map_count
中设置/etc/sysctl.conf
,以便Elasticsearch不会尝试从容器内部执行此操作。如果您不知道所需的值,请尝试将当前设置加倍并继续运行,直到Elasticsearch成功启动。 Documentation recommends至少262144。
答案 1 :(得分:5)
在Docker主机终端(Docker CLI)中运行命令:
docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
exit
答案 2 :(得分:3)
您可以通过两种方式做到这一点。
答案 3 :(得分:1)
进入docker容器
# docker exec -it <container_id> /bin/bash
您可以查看当前的 max_map_count 值
# more /proc/sys/vm/max_map_count
临时集 max_map_count 值(容器(主机)重新启动不会持续存在 max_map_count 值)
# sysctl -w vm.max_map_count=262144
永久设置值
1. # vi /etc/sysctl.conf
vm.max_map_count=262144
2. # vi /etc/rc.local
#put parameter inside rc.local file
echo 262144 > /proc/sys/vm/max_map_count
答案 4 :(得分:0)
您必须至少在262144中设置/etc/sysctl.conf中的 vm.max_map_count 变量
之后,您可以使用 sysctl --system
重新加载设置