一尘不染

Docker忽略limits.conf(试图解决“打开文件太多”错误)

docker

我正在运行一个处理数千个并发Web套接字连接的Web服务器。为此,在Debian linux上(我的基本映像是google /
debian:wheezy,在GCE上运行),其中打开文件的默认数量设置为1000,我通常只是将ulimit设置为所需的数量(64,000) 。

这非常有效,除了在我对应用程序进行Docker部署和部署时-我发现docker会忽略限制定义。我尝试了以下操作(全部在主机上,而不在容器本身上):

MAX=64000
sudo bash -c "echo \"* soft nofile $MAX\" >> /etc/security/limits.conf"
sudo bash -c "echo \"* hard nofile $MAX\" >> /etc/security/limits.conf"
sudo bash -c "echo \"ulimit -c $MAX\" >>  /etc/profile"
ulimit -c $MAX

经过一些研究,我发现人们可以通过以下方法解决类似的问题:

sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"

并重新启动/重新启动docker服务。

但是,以上所有方法均失败:当我的应用程序在容器内运行时,出现“打开文件过多”错误(在没有docker的情况下执行以下操作即可解决问题)。

我试图ulimit -a在容器内运行以获取ulimit设置是否起作用的指示,但是这样做会引发关于ulimit不是PATH一部分的可执行文件的错误。

任何人都遇到这个问题和/或可以提出一种使Docker重新认识极限的方法吗?


阅读 414

收藏
2020-06-17

共1个答案

一尘不染

我可以使用以下配置来解决此问题:

我将ubuntu 14.04 linux用于docker机器和主机。

主机 上,您需要:

  • 更新/etc/security/limits.conf以包括:* - nofile 64000
  • 添加到您的/etc/sysctl.conf中: fs.file-max = 64000
  • 重新启动sysctl:sudo sysctl -p
2020-06-17