Docker - ELK - vm.max_map_count

24

我正在尝试使用Docker镜像elk-docker (https://elk-docker.readthedocs.io/),并使用Docker Compose。.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个回答

27

你可以用两种方式来解决这个问题。

  1. 临时设置最大映射数量
    • sudo sysctl -w vm.max_map_count=262144
      但是这种方法只在重启系统之前有效。
  2. 永久设置
    • 在您的主机上
      • vi /etc/sysctl.conf
      • 添加以下内容:vm.max_map_count=262144
      • 重新启动

当我尝试在Manjaro Linux上运行带有Elasticsearch(8.3.3)的Docker容器时,遇到了这个问题。设置max_map_count有所帮助。 - Tomasz Giba

21
您可能需要在主机本身的/etc/sysctl.conf文件中设置vm.max_map_count,以便Elasticsearch不会尝试从容器内部进行该操作。如果您不知道所需值,请尝试将当前设置翻倍,直到Elasticsearch成功启动。文档建议至少为262144。

你重启了主机吗?如果你想动态更改设置,请使用 sysctl vm.max_map_count 命令来检查当前生效的值。 - mustaccio
是的,我运行了 vm.max_map_count 命令,并显示如下:vm.max_map_count = 262144。 - AleGallagher
3
我也遇到了这个问题,关于macOS主机的解决方案已经进行了一些讨论,但我不确定对Windows有什么影响。在Docker v1.13之前,解决这个问题非常简单(docker-machine ssh和运行sudo sysctl -w vm.max_map_count=262144)。现在Docker for macOS使用xhyve虚拟机,将docker-machine ssh步骤替换为screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty。来源:https://www.elastic.co/guide/en/elasticsearch/reference/master/docker.html#docker-cli-run-prod-mode - blong
2
增加vm.max_map_count时的副作用:https://www.novell.com/support/kb/doc.php?id=7000830 - Falko Menge
2
如果主机是MacOS,如何操作? - Alexandre Rademaker
显示剩余2条评论

9
在Docker主机终端(Docker CLI)中运行以下命令:
docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
exit

3
  1. Go inside your docker container

    # docker exec -it <container_id> /bin/bash
    
  2. You can view your current max_map_count value

    # more /proc/sys/vm/max_map_count
    
  3. Temporary set max_map_count value(container(host) restart will not persist max_map_count value)

    # sysctl -w vm.max_map_count=262144
    
  4. Permanently set value

    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
    

0

您需要在 /etc/sysctl.conf 中将 vm.max_map_count 变量设置为至少 262144。

之后,您可以使用 sysctl --system 重新加载设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接