{"id":4944,"date":"2026-08-22T08:00:00","date_gmt":"2026-08-22T08:00:00","guid":{"rendered":"https:\/\/netguide.io\/linux\/?p=4944"},"modified":"2026-08-10T23:44:21","modified_gmt":"2026-08-10T23:44:21","slug":"docker-ressourcen-begrenzen-cpu-ram","status":"publish","type":"post","link":"https:\/\/netguide.io\/linux\/de\/docker-ressourcen-begrenzen-cpu-ram\/","title":{"rendered":"Docker: CPU &#038; RAM begrenzen (Ressourcen-Limits)"},"content":{"rendered":"<script type=\"text\/plain\" data-tcf=\"waiting-for-consent\" data-id=\"4797\" data-bid=\"2\" data-placement=\"4798\">PGRpdiBpZD0ibmV0Z3VpZGVhLTQwMDA4ODY0MDEiIGNsYXNzPSJuZXRndWlkZWEtYmVmb3JlLWNvbnRlbnQgbmV0Z3VpZGVhLWVudGl0eS1wbGFjZW1lbnQiPjxkaXYgY2xhc3M9Im5ldGd1aWRlYS1hZGxhYmVsIj5BZHZlcnRpc2VtZW50czwvZGl2PjxzY3JpcHQgYXN5bmMgc3JjPSIvL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tL3BhZ2VhZC9qcy9hZHNieWdvb2dsZS5qcz9jbGllbnQ9Y2EtcHViLTYyNTg1NTYyNTcyNDU5OTgiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PjxpbnMgY2xhc3M9ImFkc2J5Z29vZ2xlIiBzdHlsZT0iZGlzcGxheTpibG9jazsiIGRhdGEtYWQtY2xpZW50PSJjYS1wdWItNjI1ODU1NjI1NzI0NTk5OCIgCmRhdGEtYWQtc2xvdD0iMzQ5NDExNTM0MiIgCmRhdGEtYWQtZm9ybWF0PSJhdXRvIj48L2lucz4KPHNjcmlwdD4gCihhZHNieWdvb2dsZSA9IHdpbmRvdy5hZHNieWdvb2dsZSB8fCBbXSkucHVzaCh7fSk7IAo8L3NjcmlwdD4KPC9kaXY+<\/script>\n<p class=\"wp-block-paragraph\">Ein einziger au\u00dfer Kontrolle geratener Container kann einen ganzen Server ausbremsen, wenn er sich unbegrenzt Arbeitsspeicher und CPU nimmt. Die L\u00f6sung sind Ressourcen-Limits. In dieser Anleitung zeigen wir dir, wie du <strong>Docker-Container in CPU und RAM begrenzt<\/strong> \u2013 per Kommandozeile und in der <code>docker-compose.yml<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Standardm\u00e4\u00dfig darf sich ein Docker-Container so viel <strong>CPU<\/strong> und <strong>Arbeitsspeicher<\/strong> nehmen, wie das Host-System hergibt. Auf einem geteilten Server ist das ein Risiko: Ein einziger Speicher-Leak oder eine Endlosschleife kann alle anderen Dienste ausbremsen oder den Host zum Stillstand bringen. Mit <strong>Ressourcen-Limits<\/strong> ziehst du klare Grenzen und sorgst f\u00fcr vorhersehbaren Betrieb. In dieser Anleitung lernst du nicht nur die passenden Flags f\u00fcr <code>docker run<\/code> und die <strong>docker-compose.yml<\/strong>, sondern auch, wie CPU-Shares, der OOM-Killer und Reservierungen im Hintergrund funktionieren \u2013 damit deine Container-Limits im Ernstfall wirklich greifen.<\/p>\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-1ffd1ad5      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tInhaltsverzeichnis\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#warum-limits-setzen\" class=\"uagb-toc-link__trigger\">Warum Limits setzen?<\/a><li class=\"uagb-toc__list\"><a href=\"#limits-bei-docker-run\" class=\"uagb-toc-link__trigger\">Limits bei docker run<\/a><li class=\"uagb-toc__list\"><a href=\"#limits-in-docker-composeyml\" class=\"uagb-toc-link__trigger\">Limits in docker-compose.yml<\/a><li class=\"uagb-toc__list\"><a href=\"#ressourcenverbrauch-beobachten\" class=\"uagb-toc-link__trigger\">Ressourcenverbrauch beobachten<\/a><li class=\"uagb-toc__list\"><a href=\"#h\u00e4ufige-fehler\" class=\"uagb-toc-link__trigger\">H\u00e4ufige Fehler<\/a><li class=\"uagb-toc__list\"><a href=\"#cpu-limits-richtig-verstehen\" class=\"uagb-toc-link__trigger\">CPU-Limits richtig verstehen<\/a><li class=\"uagb-toc__list\"><a href=\"#ram-limits-und-der-oom-killer\" class=\"uagb-toc-link__trigger\">RAM-Limits und der OOM-Killer<\/a><li class=\"uagb-toc__list\"><a href=\"#limits-f\u00fcr-die-produktion-planen\" class=\"uagb-toc-link__trigger\">Limits f\u00fcr die Produktion planen<\/a><li class=\"uagb-toc__list\"><a href=\"#h\u00e4ufige-fragen\" class=\"uagb-toc-link__trigger\">H\u00e4ufige Fragen<\/a><li class=\"uagb-toc__list\"><a href=\"#was-passiert-wenn-ein-container-sein-ram-limit-\u00fcberschreitet\" class=\"uagb-toc-link__trigger\">Was passiert, wenn ein Container sein RAM-Limit \u00fcberschreitet?<\/a><li class=\"uagb-toc__list\"><a href=\"#was-ist-der-unterschied-zwischen-limit-und-reservation\" class=\"uagb-toc-link__trigger\">Was ist der Unterschied zwischen Limit und Reservation?<\/a><li class=\"uagb-toc__list\"><a href=\"#warum-scheint-meine-cpu-begrenzung-ignoriert-zu-werden\" class=\"uagb-toc-link__trigger\">Warum scheint meine CPU-Begrenzung ignoriert zu werden?<\/a><li class=\"uagb-toc__list\"><a href=\"#fazit\" class=\"uagb-toc-link__trigger\">Fazit<\/a><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Warum Limits setzen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Standardm\u00e4\u00dfig d\u00fcrfen Container so viele Ressourcen nutzen, wie der Host hergibt. Ein Speicherleck oder ein Lastspitze reicht dann, um andere Dienste zu verdr\u00e4ngen. Limits schaffen faire Verh\u00e4ltnisse und sch\u00fctzen den Host.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Limits bei docker run<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00dcber <code>--memory<\/code> und <code>--cpus<\/code> begrenzt du einen Container direkt beim Start:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>docker run -d \\\n  --memory=\"512m\" \\\n  --cpus=\"1.5\" \\\n  --name app meine-app:latest<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">docker<\/span><span style=\"color: #9ECBFF\"> run<\/span><span style=\"color: #79B8FF\"> -d<\/span><span style=\"color: #79B8FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #79B8FF\">  --memory=<\/span><span style=\"color: #9ECBFF\">\"512m\"<\/span><span style=\"color: #79B8FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #79B8FF\">  --cpus=<\/span><span style=\"color: #9ECBFF\">\"1.5\"<\/span><span style=\"color: #79B8FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #79B8FF\">  --name<\/span><span style=\"color: #9ECBFF\"> app<\/span><span style=\"color: #9ECBFF\"> meine-app:latest<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Das erlaubt maximal 512 MB RAM und 1,5 CPU-Kerne. \u00dcberschreitet der Container das Speicherlimit, beendet Docker ihn (OOM-Kill).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Limits in docker-compose.yml<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In Compose setzt du Limits \u00fcber den <code>deploy.resources<\/code>-Block. Das funktioniert auch ohne Swarm:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>services:\n  app:\n    image: meine-app:latest\n    deploy:\n      resources:\n        limits:\n          cpus: \"1.5\"\n          memory: 512M\n        reservations:\n          memory: 256M<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #85E89D\">services<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">  app<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">    image<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #9ECBFF\">meine-app:latest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">    deploy<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">      resources<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">        limits<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">          cpus<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #9ECBFF\">\"1.5\"<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">          memory<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #9ECBFF\">512M<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">        reservations<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">          memory<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #9ECBFF\">256M<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>limits<\/code> ist die Obergrenze, <code>reservations<\/code> reserviert ein Minimum. Die Grundlagen liefert <a href=\"https:\/\/netguide.io\/linux\/de\/docker-compose-installieren-ubuntu-debian\/\">Docker Compose installieren<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Ressourcenverbrauch beobachten<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ob deine Limits passen, siehst du am Live-Verbrauch aller Container:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>docker stats<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">docker<\/span><span style=\"color: #9ECBFF\"> stats<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Die Ausgabe zeigt CPU- und Speichernutzung in Echtzeit \u2013 ideal, um Limits sinnvoll einzustellen. F\u00fcr den Blick aufs Gesamtsystem hilft <a href=\"https:\/\/netguide.io\/linux\/de\/linux-speicherplatz-analysieren-df-du-ncdu\/\">Speicherplatz analysieren<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">H\u00e4ufige Fehler<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Limit zu niedrig gesetzt:<\/strong> Erreicht ein Container sein Speicherlimit, beendet Docker ihn hart (Exit-Code 137, OOM-Kill). Beobachte den realen Bedarf, bevor du eng limitierst.<\/li>\n\n\n\n<li><strong>CPU-Limit missverstanden:<\/strong> <code>--cpus=\"1.5\"<\/code> bedeutet 1,5 Kerne Rechenzeit, nicht \u201eKern 1 und 2&#8243;. Zum Anpinnen konkreter Kerne gibt es <code>--cpuset-cpus<\/code>.<\/li>\n\n\n\n<li><strong>Limits vergessen:<\/strong> Ohne Limit darf ein Container den gesamten Host beanspruchen \u2013 setze sie besonders bei \u00f6ffentlich erreichbaren Diensten.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">CPU-Limits richtig verstehen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bei der CPU gibt es mehrere Stellschrauben, die leicht verwechselt werden. <code>--cpus<\/code> gibt eine harte Obergrenze an CPU-Zeit an \u2013 <code>--cpus=\"1.5\"<\/code> bedeutet, der Container darf h\u00f6chstens anderthalb Kerne auslasten. <code>--cpu-shares<\/code> dagegen ist nur eine relative Gewichtung, die erst greift, wenn tats\u00e4chlich Knappheit herrscht. Mit <code>--cpuset-cpus<\/code> bindest du einen Container fest an bestimmte Kerne.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Option<\/th><th>Wirkung<\/th><th>Wann sinnvoll<\/th><\/tr><\/thead><tbody><tr><td><code>--cpus<\/code><\/td><td>Harte Obergrenze an CPU-Zeit<\/td><td>Klare Deckelung pro Dienst<\/td><\/tr><tr><td><code>--cpu-shares<\/code><\/td><td>Relatives Gewicht bei Knappheit<\/td><td>Priorisierung mehrerer Container<\/td><\/tr><tr><td><code>--cpuset-cpus<\/code><\/td><td>Bindung an bestimmte Kerne<\/td><td>Isolation, NUMA-Optimierung<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die meisten Setups ist <code>--cpus<\/code> die richtige Wahl, weil das Verhalten leicht vorhersagbar ist. <code>--cpu-shares<\/code> lohnt sich erst, wenn mehrere Container um dieselben Kerne konkurrieren und du festlegen willst, wer im Zweifel Vorrang bekommt. <code>--cpuset-cpus<\/code> schlie\u00dflich ist ein Spezialwerkzeug: Es h\u00e4lt latenzkritische Dienste von anderer Rechenlast fern und kann auf Servern mit mehreren CPU-Sockeln Zugriffe \u00fcber NUMA-Grenzen hinweg vermeiden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">RAM-Limits und der OOM-Killer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Setzt du mit <code>--memory=\"512m\"<\/code> ein Speicherlimit und der Container \u00fcberschreitet es, greift der <strong>OOM-Killer<\/strong> des Kernels ein und beendet den Prozess hart. F\u00fcr die Anwendung f\u00fchlt sich das wie ein pl\u00f6tzlicher Absturz an. Deshalb solltest du das Limit an den realen Bedarf plus einen Puffer anlehnen und nicht zu knapp w\u00e4hlen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein h\u00e4ufig \u00fcbersehener Punkt ist Swap: Mit <code>--memory-swap<\/code> steuerst du, wie viel Auslagerungsspeicher zus\u00e4tzlich erlaubt ist. Setzt du beide Werte gleich, verbietest du Swap komplett \u2013 oft die sauberste Variante, weil ein Dienst, der ins Swapping ger\u00e4t, meist ohnehin unbrauchbar langsam wird. Beobachte den tats\u00e4chlichen Verbrauch am besten laufend, etwa mit <a href=\"https:\/\/netguide.io\/linux\/de\/linux-ram-prozesse-ueberwachen-top-htop\/\">top und htop<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Limits f\u00fcr die Produktion planen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Limits sind eine Obergrenze, Reservierungen dagegen eine Zusicherung. In Compose legst du mit <code>deploy.resources.limits<\/code> das Maximum fest und mit <code>deploy.resources.reservations<\/code> das Minimum, das der Scheduler garantiert freih\u00e4lt. In der Kombination bekommst du planbare Lasten, ohne Reserven zu verschenken.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Miss zuerst, dann limitiere:<\/strong> Beobachte den Verbrauch unter realer Last, bevor du Werte festlegst.<\/li>\n\n\n\n<li><strong>Puffer einplanen:<\/strong> Rund 20\u201330 Prozent \u00fcber dem Spitzenbedarf verhindern unn\u00f6tige OOM-Kills.<\/li>\n\n\n\n<li><strong>Limits dokumentieren:<\/strong> Halte sie in der Compose-Datei fest, damit sie versioniert und reproduzierbar sind.<\/li>\n\n\n\n<li><strong>Nach Updates neu pr\u00fcfen:<\/strong> Neue Programmversionen \u00e4ndern oft den Speicherbedarf.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Zum Feinjustieren ist <code>docker stats<\/code> dein bester Freund: Der Befehl zeigt live den CPU- und RAM-Verbrauch aller laufenden Container, jeweils samt Prozentwert im Verh\u00e4ltnis zum gesetzten Limit. L\u00e4uft ein Dienst dauerhaft nahe an seiner Speichergrenze, ist das ein klares Signal, das Limit anzuheben oder die Anwendung selbst zu optimieren. Umgekehrt zeigt dir eine dauerhaft niedrige Auslastung, dass du Reserven zu gro\u00dfz\u00fcgig vergeben hast und Kapazit\u00e4t f\u00fcr andere Container frei wird.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">H\u00e4ufige Fragen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Rund um Ressourcen-Limits gibt es einige Missverst\u00e4ndnisse. Die folgenden Antworten r\u00e4umen die h\u00e4ufigsten aus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Was passiert, wenn ein Container sein RAM-Limit \u00fcberschreitet?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der Kernel beendet den speicherhungrigsten Prozess im Container \u00fcber den OOM-Killer. Der Container stoppt oder startet \u2013 je nach Restart-Policy \u2013 neu. In den Logs (<code>dmesg<\/code> oder <code>journalctl<\/code>) findest du einen entsprechenden \u201eOut of memory&#8221;-Eintrag.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Was ist der Unterschied zwischen Limit und Reservation?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ein <strong>Limit<\/strong> ist die Obergrenze, die ein Container nicht \u00fcberschreiten darf. Eine <strong>Reservation<\/strong> ist die garantierte Mindestmenge, die ihm zugesichert wird. Limits sch\u00fctzen den Host, Reservierungen sch\u00fctzen den einzelnen Dienst vor Aushungern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Warum scheint meine CPU-Begrenzung ignoriert zu werden?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e4ufig wird <code>--cpu-shares<\/code> mit einer harten Grenze verwechselt: Shares wirken nur bei Konkurrenz um die CPU. Solange der Host nicht ausgelastet ist, darf der Container mehr nutzen. F\u00fcr eine echte Deckelung brauchst du <code>--cpus<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mit <code>--memory<\/code>\/<code>--cpus<\/code> oder dem <code>deploy.resources<\/code>-Block h\u00e4ltst du einzelne Container im Zaum und sch\u00fctzt den ganzen Host vor \u00dcberlastung. Beobachte den Verbrauch mit <code>docker stats<\/code> und passe die Grenzen an. Zusammen mit <a href=\"https:\/\/netguide.io\/linux\/de\/docker-healthcheck-einrichten\/\">Healthchecks<\/a> und <a href=\"https:\/\/netguide.io\/linux\/de\/docker-restart-policy-container-automatisch-starten\/\">Restart-Policies<\/a> l\u00e4uft deine Umgebung stabil und vorhersehbar.<\/p>\n<script type=\"text\/plain\" data-tcf=\"waiting-for-consent\" data-id=\"4799\" data-bid=\"2\" data-placement=\"4800\">PGRpdiBpZD0ibmV0Z3VpZGVhLTcyODk3MTg4NSIgY2xhc3M9Im5ldGd1aWRlYS1hZnRlci1jb250ZW50IG5ldGd1aWRlYS1lbnRpdHktcGxhY2VtZW50Ij48ZGl2IGNsYXNzPSJuZXRndWlkZWEtYWRsYWJlbCI+QWR2ZXJ0aXNlbWVudHM8L2Rpdj48c2NyaXB0IGFzeW5jIHNyYz0iLy9wYWdlYWQyLmdvb2dsZXN5bmRpY2F0aW9uLmNvbS9wYWdlYWQvanMvYWRzYnlnb29nbGUuanM\/Y2xpZW50PWNhLXB1Yi02MjU4NTU2MjU3MjQ1OTk4IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48aW5zIGNsYXNzPSJhZHNieWdvb2dsZSIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IiBkYXRhLWFkLWNsaWVudD0iY2EtcHViLTYyNTg1NTYyNTcyNDU5OTgiIApkYXRhLWFkLXNsb3Q9IjQ1NTk3ODUwMDIiIApkYXRhLWFkLWZvcm1hdD0iYXV0byI+PC9pbnM+CjxzY3JpcHQ+IAooYWRzYnlnb29nbGUgPSB3aW5kb3cuYWRzYnlnb29nbGUgfHwgW10pLnB1c2goe30pOyAKPC9zY3JpcHQ+CjwvZGl2Pg==<\/script>","protected":false},"excerpt":{"rendered":"<p>Docker-Container in CPU und RAM begrenzen: mit &#8211;memory und &#8211;cpus oder in docker-compose.yml Limits setzen, damit ein Container nicht den ganzen Host lahmlegt.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[231,9],"tags":[],"class_list":["post-4944","post","type-post","status-publish","format-standard","hentry","category-docker","category-linux"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Tobias Pries","author_link":"https:\/\/netguide.io\/linux\/author\/tobias-pries\/"},"uagb_comment_info":0,"uagb_excerpt":"Docker-Container in CPU und RAM begrenzen: mit --memory und --cpus oder in docker-compose.yml Limits setzen, damit ein Container nicht den ganzen Host lahmlegt.","brizy_media":[],"_links":{"self":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/comments?post=4944"}],"version-history":[{"count":3,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4944\/revisions"}],"predecessor-version":[{"id":4983,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4944\/revisions\/4983"}],"wp:attachment":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/media?parent=4944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/categories?post=4944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/tags?post=4944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}