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 CodeBuild 和 EB CLI 部署到 AWS Elastic Beanstalk