docker-compose up -d在尝试在docker-compose.yml文件中设置mem_limit时给出“OCI运行时创建失败:错误的rlimit值”

问题描述 投票:0回答:1

docker-compose版本1.18.0,在Ubuntu 16.04上构建8dd22a9 Docker版本17.12.0-ce,构建c97c6d6 docker-compose文件版本:'3'

docker-compose文件的相关部分

elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.6.0
    container_name: elasticsearch1
    restart: unless-stopped
    environment:
        - http.host=0.0.0.0
        - reindex.remote.whitelist=remote_es:*
        - xpack.security.enabled=false
        - cluster.name=docker-cluster
        - bootstrap.memory_lock=true
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
        memlock:
            soft: -1
            hard: -1
        mem_limit: 1000000000
    volumes:
        - esdata1:/usr/share/elasticsearch/data
    ports:
        - 9200:9200 

当我做一个docker-compose up -d时,我收到以下错误:

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

有什么想法发生了什么?

docker-compose reference document似乎意味着由于我没有在swarm模式下运行,我应该使用mem_limit的第2版语法,即使我的docker-compose文件是版本3。

docker docker-compose
1个回答
0
投票
ERROR: for elasticsearch1  Cannot start service elasticsearch1: OCI runtime create failed: wrong rlimit value: RLIMIT_MEM_LIMIT: unknown

你得到了上面的错误,因为在mem_limit部分下设置了ulimits。它应该在与imageenvironment等相同级别的容器级别下:

elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.6.0
    container_name: elasticsearch1
    restart: unless-stopped
    environment:
        - http.host=0.0.0.0
        - reindex.remote.whitelist=remote_es:*
        - xpack.security.enabled=false
        - cluster.name=docker-cluster
        - bootstrap.memory_lock=true
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
        memlock:
            soft: -1
            hard: -1
    mem_limit: 1000000000
    volumes:
        - esdata1:/usr/share/elasticsearch/data
    ports:
        - 9200:9200 

另一个问题在这里。根据issue

v3格式专门设计为使用Swarm模式和docker stack功能运行。当替换它们时,我们重新添加选项到该格式是没有意义的,并且在Swarm模式下会被忽略。

这意味着您只能在版本2中使用cpu_sharescpu_quotacpusetmem_limitmemswap_limitmem_swappiness,并且仅在swarm模式下使用版本3中的new resource options

因此,如果您不想使用swarm模式,则需要使用版本2。

最终的docker-compose.yml是:

version: '2'
services:
    elasticsearch1:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.6.0
        container_name: elasticsearch1
        restart: unless-stopped
        environment:
            - http.host=0.0.0.0
            - reindex.remote.whitelist=remote_es:*
            - xpack.security.enabled=false
            - cluster.name=docker-cluster
            - bootstrap.memory_lock=true
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        mem_limit: 1000000000
        volumes:
            - esdata1:/usr/share/elasticsearch/data
        ports:
            - 9200:9200 
© www.soinside.com 2019 - 2024. All rights reserved.