You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

docker-compose up -d报RLIMIT_MEM_LIMIT错误,mem_limit配置求助

解决Docker-Compose启动Elasticsearch容器时的RLIMIT_MEM_LIMIT错误

我来帮你分析并解决这个启动错误:

问题场景

你在Ubuntu 16.04系统下,使用Docker 17.12.0-ce、Docker Compose 1.18.0启动Elasticsearch 5.6.0容器时,遇到了以下错误:

ERROR: for elasticsearch1 Cannot start service elasticsearch1: OCI runtime create failed: wrong rlimit value: RLIMIT_MEM_LIMIT: unknown

你的docker-compose.yml使用了版本3的配置,其中Elasticsearch服务包含mem_limit: 1000000000的内存限制项。

错误原因

正如你查阅Docker Compose文档发现的那样:当未运行在Swarm模式下时,即使使用版本3的配置文件,也必须使用版本2的内存限制语法。

在Compose版本3的规范中,mem_limit是专门给Swarm集群模式设计的配置字段;而在普通的Docker Compose单节点运行模式下,你的Docker和Compose版本(17.12.0-ce + 1.18.0)无法正确解析版本3配置里的mem_limit,从而触发了RLIMIT_MEM_LIMIT的未知错误。

解决方案

你只需要调整内存限制的配置写法,适配非Swarm模式的运行环境即可:

  1. 修改docker-compose.yml中的内存配置
    将原来的:

    mem_limit: 1000000000
    

    替换为版本2兼容的格式(非Swarm模式下,版本3配置依然支持版本2的资源限制字段):

    # 可以用更易读的单位写法
    mem_limit: 1g
    # 或者保留数值写法,格式本身没问题,只是需要确保非Swarm模式下使用版本2的语法逻辑
    # mem_limit: 1000000000
    

    如果你想尝试版本3的deploy配置,需要注意只有在Swarm模式下才会生效,非Swarm模式下依然会报错,所以不推荐:

    deploy:
      resources:
        limits:
          memory: 1g
    
  2. 重新启动服务
    修改完成后,执行以下命令重启容器:

    docker-compose down
    docker-compose up -d
    

额外说明

你配置中的bootstrap.memory_lock=true和ES_JAVA_OPTS=-Xms512m -Xmx512m已经合理设置了JVM堆内存,配合mem_limit:1g的配置(预留了足够的非堆内存空间),这部分不需要调整。

内容的提问来源于stack exchange,提问作者Rohith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:39:07