我正在运行一个处理数千个并发web套接字连接的web服务器。为了这个可能,在Debian linux上(我的基本映像是google/debian:wheezy,运行在GCE上),默认的打开文件数量设置为1000,我通常只需将ulimit设置为所需的数字(64,000) 。Docker忽略limits.conf(试图解决“打开太多文件”的错误)
这很好,除了当我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即可解决问题),出现“打开的文件过多”错误。
我试图在容器中运行ulimit -a
以获得ulimit设置是否工作的指示,但这样做会引发ulimit不是PATH的一部分的可执行文件的错误。
任何人都遇到过这种情况,并且/或者可以建议一种方法让码头承认极限?
一定要重新启动Docker守护程序服务! – cgp 2015-02-14 15:45:52