我正在运行一个处理数千个并发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一部分的可执行文件的错误。
ulimit -a
任何人都遇到这个问题和/或可以提出一种使Docker重新认识极限的方法吗?
我可以使用以下配置来解决此问题:
我将ubuntu 14.04 linux用于docker机器和主机。
在 主机 上,您需要:
* - nofile 64000
fs.file-max = 64000