AWS Elastic beanstalk:使用 docker 镜像时如何设置 ulimit

Posted

技术标签:

【中文标题】AWS Elastic beanstalk:使用 docker 镜像时如何设置 ulimit【英文标题】:AWS Elastic beanstalk: how to set ulimit when using docker images 【发布时间】:2021-04-05 18:45:12 【问题描述】:

我在 Elastic beanstalk 集群中使用 docker 环境,但遇到打开文件限制的问题。我验证了在主机上我的打开文件限制为 65535,但在 docker 容器中,软限制为 1024,硬限制为 4096。我想在容器内增加这些限制,但是当我尝试手动执行此操作时,我即使使用 root 也会出错:

root@4020d4faf5fc:/# ulimit -n 20000
bash: ulimit: open files: cannot modify limit: Operation not permitted

similar thread 也分享了一些想法,但似乎这些想法与增加主机与容器的限制有关。

【问题讨论】:

【参考方案1】:

您需要SYS_RESOURCE Linux 功能才能从容器内设置 ulimit,通常指定为 using the --cap-add flag with docker run

使用 Elastic Beanstalk 可以通过以下方式实现:

    如果您已经在使用 docker-compose,然后像往常一样将它添加到您的 compose 文件中(在 services.<your service> 键下)
    ulimits:
        nofile:
            soft: 20000
            hard: 20000
    
    如果您将Dockerrun.aws.json 版本1 用于单容器Docker 环境,请参阅Task Definition Resource Limits:
    
        "AWSEBDockerrunVersion": "1",
        .
        .
        .
        "ulimits": [
            
                "name": "nofile",
                "softLimit": 20000,
                "hardLimit": 20000
            
        ]
    
    
    如果您将Dockerrun.aws.json 版本2 用于多容器Docker 环境,this gist may be useful
    
       "AWSEBDockerrunVersion": "2",
       "containerDefinitions": [ 
           
               .
               .
               .
               "ulimits": [ 
                    
                       "hardLimit": 20000,
                       "name": "nofile",
                       "softLimit": 20000
                   
               ]
           
       ]
    
    

另请参阅Elastic Beanstalk Docker docs。

【讨论】:

谢谢@tamth,这看起来很有希望。我找不到 containerDefinitions 的文档,你知道它是否适用于特定版本的 Dockerrun.aws.json @Ankit 谢谢,我已经扩展了答案以区分 v1 和 v2。 谢谢。我们最终切换到使用 docker-compose.yml。似乎最直接。 @tamth 你试过解决方案 2 吗?我的测试没有任何改变。 :思考: @user1791139 我需要更多上下文来理解您的问题。

以上是关于AWS Elastic beanstalk:使用 docker 镜像时如何设置 ulimit的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 上禁止使用 Django 403

AWS Elastic Beanstalk

使用 AWS CodeBuild 和 EB CLI 部署到 AWS Elastic Beanstalk

Elastic Beanstalk (AWS) 的休眠配置

如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?

AWS 和 Elastic Beanstalk