码头工人 - 麋鹿 - vm.max_map_count

Posted

技术标签:

【中文标题】码头工人 - 麋鹿 - vm.max_map_count【英文标题】:Docker - ELK - vm.max_map_count 【发布时间】:2017-04-25 04:15:25 【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您可能需要在主机本身的/etc/sysctl.conf 中设置vm.max_map_count,以便Elasticsearch 不会尝试从容器内部执行此操作。如果您不知道所需的值,请尝试将当前设置加倍并继续,直到 Elasticsearch 成功启动。 Documentation recommends 至少 262144。

【讨论】:

感谢您的回答。我在 sysctl.conf 文件中设置了 vm.max_map_count 为 262144,但是 cosole 显示同样的错误。 您是否重新启动了主机?如果要动态更改设置,请使用sysctl vm.max_map_count 检查生效的值。 我也遇到过这种情况,并且已经就 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 。来源:elastic.co/guide/en/elasticsearch/reference/master/… 增加 vm.max_map_count 时的副作用:novell.com/support/kb/doc.php?id=7000830 如果宿主机是MacOS怎么办?【参考方案2】:

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

    临时设置 max_map_count: sudo sysctl -w vm.max_map_count=262144 但这只会持续到您重新启动系统。 永久 在您的主机中 vi /etc/sysctl.conf 进入 vm.max_map_count=262144 重启

【讨论】:

【参考方案3】:

在 Docker 主机终端 (Docker CLI) 中运行命令:

docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
exit

【讨论】:

【参考方案4】:

    进入你的 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
    

【讨论】:

【参考方案5】:

您必须在 /etc/sysctl.conf 中设置 vm.max_map_count 变量至少为 262144

之后,您可以使用 sysctl --system

重新加载设置

【讨论】:

以上是关于码头工人 - 麋鹿 - vm.max_map_count的主要内容,如果未能解决你的问题,请参考以下文章

码头工人撰写孤儿容器警告

码头工人群或牧场牛中的芹菜工人

iptables 块码头工人

芹菜多里面码头工人容器

牧场主网络码头工人撰写

有闪亮的服务器专业问题的码头工人