Ich benutze einen Webserver, der viele tausend gleichzeitige Web-Socket-Verbindungen verarbeitet. Damit dies möglich ist, habe ich auf Debian linux (mein Basis-Image ist google/debian: wheezy, läuft auf GCE), wo die Standardanzahl der geöffneten Dateien auf 1000 gesetzt ist, normalerweise nur ulimit auf die gewünschte Zahl (64.000) setzen. .Docker Ignoriert limits.conf (versucht "zu viele offene Dateien" zu lösen)
Das funktioniert großartig, außer dass, wenn ich meine Anwendung dockerisierte und es implementierte - fand ich heraus, dass docker die Limitdefinitionen ignoriert. Ich habe folgendes versucht (alle auf dem Host-Computer, nicht auf den Behälter selbst):
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
Nach einigen Recherchen finde ich, dass Menschen in der Lage waren, ein ähnliches Problem zu lösen, indem Sie diese:
sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
und den Docker-Dienst neu starten/neu starten.
Alle oben genannten jedoch fehlschlagen: Ich erhalte den Fehler "zu viele offene Dateien", wenn meine App innerhalb des Containers ausgeführt wird (die folgenden Schritte ohne Andockfenster lösen das Problem).
Ich habe versucht, ulimit -a
innerhalb des Containers ausführen, um eine Angabe zu erhalten, wenn die Ulimit-Setup funktionierte, aber dabei ein Fehler über Ulimit nicht eine ausführbare Datei, die ein Teil des PATH ist.
Wer ist hier reingekommen und/oder kann einen Weg vorschlagen, den Hafenarbeiter dazu zu bringen, die Grenzen zu erkennen?
Achten Sie darauf, den Docker-Daemon-Dienst ebenfalls neu zu starten! – cgp