解决Windows 10使用Desktop Docker运行Elasticsearch时出现“max virtual memory areas vm.max_map_count [65530] is

在Windows 10上使用Desktop Docker运行Elasticsearch时,可能会遇到以下报错:

node validation exception
[1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

这篇文章将介绍三种解决这个问题的方法。首先需要了解Desktop Docker的工作原理。

Desktop Docker与WSL子系统

Desktop Docker依赖于Windows的WSL(Windows Subsystem for Linux)子系统,以便在Windows环境中运行Linux容器。可以在命令提示符(CMD)窗口中使用以下命令查询当前的WSL子系统:

wsl --list

这将显示出如下结果:

docker-desktop-data (默认)
docker-desktop
docker-desktop-data
  • 作用:该子系统负责存储Docker的持久化数据,包括镜像、容器、卷、网络等。这些数据在容器停止或重新启动后仍然保留,确保数据不会丢失。
docker-desktop
  • 作用:该子系统是Docker引擎运行的环境,它包含了所有必要的工具和服务,以便在Windows上运行Docker容器。通过这个子系统,Docker可以在Windows系统上执行Linux容器。

解决报错的方法

为了解决Elasticsearch的启动报错,我们需要调整Docker子系统的虚拟内存映射计数。以下是三种解决方法:

方法一:修改/proc/sys/vm/max_map_count文件
  1. 打开命令提示符(CMD)或PowerShell。
  2. 切换到docker-desktop子系统:
wsl -d docker-desktop

解释

  • wsl -d docker-desktop:该命令用于启动并切换到指定的WSL子系统(在这里是docker-desktop),使我们能够在该子系统中执行命令。
  1. docker-desktop子系统中运行以下命令:
echo 262144 >> /proc/sys/vm/max_map_count

解释

  • echo 262144 >> /proc/sys/vm/max_map_count:该命令将值262144写入/proc/sys/vm/max_map_count文件中。/proc/sys/vm/max_map_count文件指定了系统允许的最大虚拟内存区域数。默认值为65530,而Elasticsearch要求至少为262144。通过修改这个值,我们可以满足Elasticsearch的启动要求。
为什么是/proc/sys/vm/max_map_count路径

在Linux系统中,/proc文件系统提供了一种机制,允许内核和进程间进行通信,/proc/sys目录包含了可以通过sysctl接口动态修改的内核参数。vm.max_map_count是一个内核参数,它控制单个进程可以拥有的最大虚拟内存区域数。通过调整这个参数,可以满足特定应用程序(如Elasticsearch)的资源需求。

方法二:使用sysctl命令临时修改
  1. 打开命令提示符(CMD)或PowerShell。
  2. 切换到docker-desktop子系统:
wsl -d docker-desktop
  1. docker-desktop子系统中运行以下命令:
sysctl -w vm.max_map_count=262144

解释

  • sysctl -w vm.max_map_count=262144:该命令临时将vm.max_map_count的值设置为262144。这种修改方式在系统重启后会失效,需要重新设置。
方法三:永久修改sysctl配置文件
  1. 打开命令提示符(CMD)或PowerShell。
  2. 切换到docker-desktop子系统:
wsl -d docker-desktop
  1. docker-desktop子系统中编辑/etc/sysctl.conf文件:
vi /etc/sysctl.conf

解释

  • vi /etc/sysctl.conf:该命令使用vi编辑器打开/etc/sysctl.conf文件。
  1. 按下键盘的i键进入编辑模式,然后在文件末尾添加:
vm.max_map_count=262144
  1. 长按Shift并快速按两下z(即Shift + zz)保存并退出。

  2. 使用以下命令检查修改是否成功:

grep vm.max_map_count /etc/sysctl.conf

解释

  • grep vm.max_map_count /etc/sysctl.conf:该命令用于查看/etc/sysctl.conf文件中是否包含vm.max_map_count=262144配置,确认修改是否成功。

参考

官方文档docker安装es+kibana的指南(当中还有其他系统的解决方法)

Elasticsearch: Max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦境游子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值