Docker - ELK - vm.max_map_count

时间:2016-12-09 16:15:14

标签: elasticsearch docker docker-compose elastic-stack

我正在使用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

如何解决问题?

5 个答案:

答案 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)

您可以通过两种方式做到这一点。

  1. 临时设置max_map_count
    • sudo sysctl -w vm.max_map_count = 262144
      ,但这只能持续到重新启动系统为止。
  2. 表现
    • 在您的主机中
      • vi /etc/sysctl.conf
      • 输入 vm.max_map_count = 262144
      • 重新启动

答案 3 :(得分:1)

  1. 进入docker容器

    # docker exec -it <container_id> /bin/bash
    
  2. 您可以查看当前的 max_map_count

    # more /proc/sys/vm/max_map_count
    
  3. 临时集 max_map_count 值(容器(主机)重新启动不会持续存在 max_map_count 值)

    # sysctl -w vm.max_map_count=262144
    
  4. 永久设置值

    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

重新加载设置