码头工人 - 麋鹿 - 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的主要内容,如果未能解决你的问题,请参考以下文章