{"id":4919,"date":"2026-08-10T21:49:39","date_gmt":"2026-08-10T21:49:39","guid":{"rendered":"https:\/\/netguide.io\/linux\/docker-netzwerke-erklaert\/"},"modified":"2026-08-10T23:40:58","modified_gmt":"2026-08-10T23:40:58","slug":"docker-netzwerke-erklaert","status":"publish","type":"post","link":"https:\/\/netguide.io\/linux\/de\/docker-netzwerke-erklaert\/","title":{"rendered":"Docker Netzwerke erkl\u00e4rt: bridge, host &#038; eigene Netze"},"content":{"rendered":"<script type=\"text\/plain\" data-tcf=\"waiting-for-consent\" data-id=\"4797\" data-bid=\"2\" data-placement=\"4798\">PGRpdiBpZD0ibmV0Z3VpZGVhLTIxMzIxNDUwMTAiIGNsYXNzPSJuZXRndWlkZWEtYmVmb3JlLWNvbnRlbnQgbmV0Z3VpZGVhLWVudGl0eS1wbGFjZW1lbnQiPjxkaXYgY2xhc3M9Im5ldGd1aWRlYS1hZGxhYmVsIj5BZHZlcnRpc2VtZW50czwvZGl2PjxzY3JpcHQgYXN5bmMgc3JjPSIvL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tL3BhZ2VhZC9qcy9hZHNieWdvb2dsZS5qcz9jbGllbnQ9Y2EtcHViLTYyNTg1NTYyNTcyNDU5OTgiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PjxpbnMgY2xhc3M9ImFkc2J5Z29vZ2xlIiBzdHlsZT0iZGlzcGxheTpibG9jazsiIGRhdGEtYWQtY2xpZW50PSJjYS1wdWItNjI1ODU1NjI1NzI0NTk5OCIgCmRhdGEtYWQtc2xvdD0iMzQ5NDExNTM0MiIgCmRhdGEtYWQtZm9ybWF0PSJhdXRvIj48L2lucz4KPHNjcmlwdD4gCihhZHNieWdvb2dsZSA9IHdpbmRvdy5hZHNieWdvb2dsZSB8fCBbXSkucHVzaCh7fSk7IAo8L3NjcmlwdD4KPC9kaXY+<\/script>\n<p class=\"wp-block-paragraph\">Warum erreicht ein Container die Datenbank nicht, obwohl beide laufen? Meist liegt es am Netzwerk. Dieser Artikel erkl\u00e4rt <strong>Docker Netzwerke<\/strong> von Grund auf: Welche Netzwerktypen es gibt, wie du eigene Netze anlegst, Container \u00fcber ihren Namen verbindest und wann du Ports nach au\u00dfen freigeben musst. So verstehst du <strong>Docker Netzwerke<\/strong> nicht nur oberfl\u00e4chlich, sondern kannst Container-Kommunikation, DNS-Aufl\u00f6sung und Port-Ver\u00f6ffentlichung gezielt steuern und typische Verbindungsprobleme selbst l\u00f6sen.<\/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=\"#welche-netzwerktypen-gibt-es\" class=\"uagb-toc-link__trigger\">Welche Netzwerktypen gibt es?<\/a><li class=\"uagb-toc__list\"><a href=\"#der-wichtige-unterschied-default-bridge-vs-eigenes-netzwerk\" class=\"uagb-toc-link__trigger\">Der wichtige Unterschied: Default-Bridge vs. eigenes Netzwerk<\/a><li class=\"uagb-toc__list\"><a href=\"#ein-eigenes-netzwerk-anlegen\" class=\"uagb-toc-link__trigger\">Ein eigenes Netzwerk anlegen<\/a><li class=\"uagb-toc__list\"><a href=\"#container-\u00fcber-den-namen-verbinden\" class=\"uagb-toc-link__trigger\">Container \u00fcber den Namen verbinden<\/a><li class=\"uagb-toc__list\"><a href=\"#netzwerke-in-docker-compose\" class=\"uagb-toc-link__trigger\">Netzwerke in docker-compose<\/a><li class=\"uagb-toc__list\"><a href=\"#ports-ver\u00f6ffentlichen-vs-interne-kommunikation\" class=\"uagb-toc-link__trigger\">Ports ver\u00f6ffentlichen vs. interne Kommunikation<\/a><li class=\"uagb-toc__list\"><a href=\"#n\u00fctzliche-netzwerk-befehle\" class=\"uagb-toc-link__trigger\">N\u00fctzliche Netzwerk-Befehle<\/a><li class=\"uagb-toc__list\"><a href=\"#netzwerk-isolation-als-sicherheitsvorteil\" class=\"uagb-toc-link__trigger\">Netzwerk-Isolation als Sicherheitsvorteil<\/a><li class=\"uagb-toc__list\"><a href=\"#h\u00e4ufige-verbindungsprobleme-beheben\" class=\"uagb-toc-link__trigger\">H\u00e4ufige Verbindungsprobleme beheben<\/a><li class=\"uagb-toc__list\"><a href=\"#bridge-host-oder-macvlan-die-richtige-wahl\" class=\"uagb-toc-link__trigger\">bridge, host oder macvlan \u2013 die richtige Wahl<\/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=\"#warum-erreichen-sich-meine-container-nicht-\u00fcber-den-namen\" class=\"uagb-toc-link__trigger\">Warum erreichen sich meine Container nicht \u00fcber den Namen?<\/a><li class=\"uagb-toc__list\"><a href=\"#muss-ich-ports-ver\u00f6ffentlichen-damit-zwei-container-kommunizieren\" class=\"uagb-toc-link__trigger\">Muss ich Ports ver\u00f6ffentlichen, damit zwei Container kommunizieren?<\/a><li class=\"uagb-toc__list\"><a href=\"#wie-verbinde-ich-einen-laufenden-container-mit-einem-weiteren-netz\" class=\"uagb-toc-link__trigger\">Wie verbinde ich einen laufenden Container mit einem weiteren Netz?<\/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\">Welche Netzwerktypen gibt es?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Docker bringt mehrere Netzwerk-Treiber mit. Diese drei sind im Alltag am wichtigsten:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Typ<\/th><th>Beschreibung<\/th><\/tr><\/thead><tbody><tr><td><strong>bridge<\/strong><\/td><td>Standard. Container h\u00e4ngen an einer virtuellen Br\u00fccke und kommunizieren isoliert vom Host-Netz.<\/td><\/tr><tr><td><strong>host<\/strong><\/td><td>Container teilt sich direkt den Netzwerk-Stack des Hosts \u2013 keine Isolation, keine Portzuordnung n\u00f6tig.<\/td><\/tr><tr><td><strong>macvlan<\/strong><\/td><td>Container bekommt eine eigene MAC- und IP-Adresse im physischen Netzwerk, erscheint wie ein echtes Ger\u00e4t.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Daneben gibt es <code>none<\/code> (kein Netzwerk) und <code>overlay<\/code> (f\u00fcr Container \u00fcber mehrere Hosts hinweg, etwa im Swarm). F\u00fcr ein einzelnes Homelab-System reichen bridge und host fast immer aus.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Der wichtige Unterschied: Default-Bridge vs. eigenes Netzwerk<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Startest du Container ohne Angabe eines Netzwerks, landen sie im Default-Bridge-Netz. Dort erreichen sie sich <strong>nur \u00fcber IP-Adressen<\/strong> \u2013 unpraktisch, weil sich diese \u00e4ndern k\u00f6nnen. Legst du dagegen ein <strong>eigenes (user-defined) Netzwerk<\/strong> an, aktiviert Docker eine automatische DNS-Aufl\u00f6sung: Container erreichen sich dann einfach <strong>\u00fcber ihren Namen<\/strong>. Das ist der Hauptgrund, warum du f\u00fcr zusammengeh\u00f6rige Dienste immer ein eigenes Netzwerk nutzen solltest.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Ein eigenes Netzwerk anlegen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ein benutzerdefiniertes Bridge-Netzwerk erstellst du mit einem einzigen Befehl:<\/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 network create mein-netz<\/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\"> network<\/span><span style=\"color: #9ECBFF\"> create<\/span><span style=\"color: #9ECBFF\"> mein-netz<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Danach startest du Container in diesem Netz \u00fcber den Parameter <code>--network<\/code>:<\/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 --name datenbank --network mein-netz postgres:16\ndocker run -d --name app --network mein-netz 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\"> --name<\/span><span style=\"color: #9ECBFF\"> datenbank<\/span><span style=\"color: #79B8FF\"> --network<\/span><span style=\"color: #9ECBFF\"> mein-netz<\/span><span style=\"color: #9ECBFF\"> postgres:16<\/span><\/span>\n<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\"> --name<\/span><span style=\"color: #9ECBFF\"> app<\/span><span style=\"color: #79B8FF\"> --network<\/span><span style=\"color: #9ECBFF\"> mein-netz<\/span><span style=\"color: #9ECBFF\"> meine-app:latest<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Container \u00fcber den Namen verbinden<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Weil beide Container im selben eigenen Netz h\u00e4ngen, erreicht die App die Datenbank jetzt einfach unter dem Hostnamen <code>datenbank<\/code> \u2013 ganz ohne IP-Adresse. In der App-Konfiguration nutzt du also z. B.:<\/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>DATABASE_HOST=datenbank\nDATABASE_PORT=5432<\/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: #F97583\">DATABASE_HOST<\/span><span style=\"color: #E1E4E8\">=datenbank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">DATABASE_PORT<\/span><span style=\"color: #E1E4E8\">=5432<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Docker l\u00f6st den Namen <code>datenbank<\/code> automatisch zur richtigen internen IP auf. \u00c4ndert sich diese, funktioniert die Verbindung trotzdem weiter.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Netzwerke in docker-compose<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In Compose erstellt Docker automatisch ein gemeinsames Netzwerk f\u00fcr alle Dienste eines Stacks \u2013 die DNS-Aufl\u00f6sung \u00fcber den Servicenamen funktioniert dort also von Haus aus. Du kannst aber auch eigene Netze definieren:<\/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    networks:\n      - frontend\n      - backend\n  datenbank:\n    image: postgres:16\n    networks:\n      - backend\n\nnetworks:\n  frontend:\n  backend:<\/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\">    networks<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">      - <\/span><span style=\"color: #9ECBFF\">frontend<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">      - <\/span><span style=\"color: #9ECBFF\">backend<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">  datenbank<\/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\">postgres:16<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">    networks<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">      - <\/span><span style=\"color: #9ECBFF\">backend<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">networks<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">  frontend<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #85E89D\">  backend<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">So trennst du sauber: Die Datenbank h\u00e4ngt nur im <code>backend<\/code>, die App vermittelt zwischen <code>frontend<\/code> und <code>backend<\/code>. Die Grundlagen dazu findest du in <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\">Ports ver\u00f6ffentlichen vs. interne Kommunikation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ein h\u00e4ufiges Missverst\u00e4ndnis: Du musst Ports <strong>nur dann<\/strong> mit <code>-p<\/code> ver\u00f6ffentlichen, wenn ein Dienst <strong>von au\u00dferhalb<\/strong> (vom Host oder aus dem Internet) erreichbar sein soll. Die Kommunikation zwischen Containern im selben Netz l\u00e4uft ohne ver\u00f6ffentlichte Ports.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Nach au\u00dfen:<\/strong> <code>-p 8080:80<\/code> macht Port 80 des Containers auf Host-Port 8080 erreichbar.<\/li>\n\n\n\n<li><strong>Intern:<\/strong> Container im selben Netz erreichen sich direkt \u00fcber den Container-Port \u2013 hier ist keine Ver\u00f6ffentlichung n\u00f6tig.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr den Zugriff aus dem Internet solltest du Dienste ohnehin nicht direkt freigeben, sondern \u00fcber einen Reverse Proxy leiten \u2013 etwa den <a href=\"https:\/\/netguide.io\/linux\/de\/mit-dem-nginx-proxy-manager-docker-container-ueber-das-internet-verfuegbar-machen\/\">Nginx Proxy Manager<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">N\u00fctzliche Netzwerk-Befehle<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Befehl<\/th><th>Wirkung<\/th><\/tr><\/thead><tbody><tr><td><code>docker network ls<\/code><\/td><td>Alle Netzwerke auflisten<\/td><\/tr><tr><td><code>docker network inspect NAME<\/code><\/td><td>Details &amp; verbundene Container anzeigen<\/td><\/tr><tr><td><code>docker network connect NETZ CONTAINER<\/code><\/td><td>Container nachtr\u00e4glich verbinden<\/td><\/tr><tr><td><code>docker network prune<\/code><\/td><td>Ungenutzte Netzwerke entfernen<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Netzwerk-Isolation als Sicherheitsvorteil<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Eigene Netzwerke sind nicht nur bequem, sie erh\u00f6hen auch die Sicherheit. Container in getrennten Netzen k\u00f6nnen sich schlicht nicht sehen. Damit trennst du zum Beispiel eine Datenbank sauber vom \u00f6ffentlich erreichbaren Webdienst: Die Datenbank liegt nur im internen <code>backend<\/code>-Netz und ver\u00f6ffentlicht keinen einzigen Port nach au\u00dfen, w\u00e4hrend der Reverse Proxy im <code>frontend<\/code>-Netz die einzige Br\u00fccke ins Internet bildet.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Vergib pro Anwendung ein eigenes Netz statt alles in die Default-Bridge zu h\u00e4ngen.<\/li>\n\n<li>Datenbanken und Caches geh\u00f6ren in ein rein internes Netz ohne <code>-p<\/code>-Portfreigabe.<\/li>\n\n<li>Setze das Flag <code>--internal<\/code>, wenn ein Netz gar keinen Zugang zum Internet erhalten soll.<\/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\">H\u00e4ufige Verbindungsprobleme beheben<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn zwei Container sich nicht erreichen, liegt es fast immer an einer von drei Ursachen. Erstens: Sie h\u00e4ngen in unterschiedlichen Netzwerken \u2013 pr\u00fcfe das mit <code>docker network inspect NETZ<\/code>. Zweitens: Die Namensaufl\u00f6sung funktioniert in der Default-Bridge nicht, du brauchst ein eigenes Netzwerk. Drittens: Der Dienst lauscht im Container nur auf <code>127.0.0.1<\/code> statt auf <code>0.0.0.0<\/code> und ist deshalb von au\u00dfen nicht erreichbar.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Symptom<\/th><th>Wahrscheinliche Ursache<\/th><\/tr><\/thead><tbody><tr><td><code>could not resolve host<\/code><\/td><td>Container liegen in der Default-Bridge \u2013 eigenes Netz anlegen<\/td><\/tr><tr><td><code>connection refused<\/code><\/td><td>Dienst lauscht nur auf localhost oder falscher Port<\/td><\/tr><tr><td>Timeout<\/td><td>Container in getrennten Netzen oder Firewall blockiert<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">bridge, host oder macvlan \u2013 die richtige Wahl<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die allermeisten Setups ist ein benutzerdefiniertes <strong>bridge<\/strong>-Netz die richtige Antwort. Den <strong>host<\/strong>-Modus nutzt du nur, wenn ein Dienst maximale Netzwerk-Performance braucht oder sehr viele Ports belegt \u2013 daf\u00fcr verzichtest du auf jede Isolation. <strong>macvlan<\/strong> ist die Spezialoption, wenn ein Container wie ein eigenst\u00e4ndiges Ger\u00e4t mit eigener IP im LAN erscheinen soll, etwa f\u00fcr einen Pi-hole-DNS-Server.<\/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 Fragen<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Warum erreichen sich meine Container nicht \u00fcber den Namen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Weil sie vermutlich in der Default-Bridge laufen. Dort gibt es keine automatische DNS-Aufl\u00f6sung. Lege ein eigenes Netzwerk mit <code>docker network create<\/code> an und starte beide Container darin \u2013 dann klappt die Verbindung \u00fcber den Container-Namen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Muss ich Ports ver\u00f6ffentlichen, damit zwei Container kommunizieren?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nein. Container im selben Netzwerk erreichen sich direkt \u00fcber den internen Port. <code>-p<\/code> brauchst du nur, wenn ein Dienst vom Host oder aus dem Internet erreichbar sein soll.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wie verbinde ich einen laufenden Container mit einem weiteren Netz?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mit <code>docker network connect NETZ CONTAINER<\/code> h\u00e4ngst du einen bereits laufenden Container zus\u00e4tzlich in ein Netzwerk, ohne ihn neu erstellen zu m\u00fcssen. Trennen geht mit <code>docker network disconnect<\/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\">Das Wichtigste in K\u00fcrze: Lege f\u00fcr zusammengeh\u00f6rige Container ein <strong>eigenes Bridge-Netzwerk<\/strong> an, dann funktioniert die Kommunikation komfortabel \u00fcber Namen. Ver\u00f6ffentliche Ports nur dort, wo Zugriff von au\u00dfen n\u00f6tig ist. Damit vermeidest du die h\u00e4ufigsten Verbindungsprobleme. Passend weiter geht es mit <a href=\"https:\/\/netguide.io\/linux\/de\/docker-volumes-daten-persistent-speichern\/\">Docker Volumes<\/a> und dem <a href=\"https:\/\/netguide.io\/linux\/de\/docker-aufraeumen-speicherplatz-freigeben\/\">Aufr\u00e4umen ungenutzter Ressourcen<\/a>.<\/p>\n<script type=\"text\/plain\" data-tcf=\"waiting-for-consent\" data-id=\"4799\" data-bid=\"2\" data-placement=\"4800\">PGRpdiBpZD0ibmV0Z3VpZGVhLTM3ODU0ODkyNDgiIGNsYXNzPSJuZXRndWlkZWEtYWZ0ZXItY29udGVudCBuZXRndWlkZWEtZW50aXR5LXBsYWNlbWVudCI+PGRpdiBjbGFzcz0ibmV0Z3VpZGVhLWFkbGFiZWwiPkFkdmVydGlzZW1lbnRzPC9kaXY+PHNjcmlwdCBhc3luYyBzcmM9Ii8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb20vcGFnZWFkL2pzL2Fkc2J5Z29vZ2xlLmpzP2NsaWVudD1jYS1wdWItNjI1ODU1NjI1NzI0NTk5OCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PGlucyBjbGFzcz0iYWRzYnlnb29nbGUiIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyIgZGF0YS1hZC1jbGllbnQ9ImNhLXB1Yi02MjU4NTU2MjU3MjQ1OTk4IiAKZGF0YS1hZC1zbG90PSI0NTU5Nzg1MDAyIiAKZGF0YS1hZC1mb3JtYXQ9ImF1dG8iPjwvaW5zPgo8c2NyaXB0PiAKKGFkc2J5Z29vZ2xlID0gd2luZG93LmFkc2J5Z29vZ2xlIHx8IFtdKS5wdXNoKHt9KTsgCjwvc2NyaXB0Pgo8L2Rpdj4=<\/script>","protected":false},"excerpt":{"rendered":"<p>Docker Netzwerke verst\u00e4ndlich erkl\u00e4rt: bridge, host und macvlan, eigene Netze anlegen, Container \u00fcber Namen verbinden und Ports richtig freigeben.<\/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-4919","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 Netzwerke verst\u00e4ndlich erkl\u00e4rt: bridge, host und macvlan, eigene Netze anlegen, Container \u00fcber Namen verbinden und Ports richtig freigeben.","brizy_media":[],"_links":{"self":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4919","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=4919"}],"version-history":[{"count":1,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4919\/revisions"}],"predecessor-version":[{"id":4964,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4919\/revisions\/4964"}],"wp:attachment":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/media?parent=4919"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/categories?post=4919"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/tags?post=4919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}