Docker networks

Die Container innerhalb von Docker kommunizieren über interne Netzwerke ( networks) miteinander. Ich habe sie schon oft innerhalb docker-compose.yml benutzt, aber nie richtig erklärt.

docker networks

Über die networks kommuniziert ein Container mit dem Host, anderen Containern oder nur sich selbst. Das hängt vom jeweiligen Driver ab.

Driver

die verschiedenen Driver sind

  • host – hiermit wird die Isolation zum Hostnetzwerk aufgehoben und der Container benutzt dann die IP-Adresse des Hosts. Hier sind keine Portfreigaben nötig, dadurch kann u.U. zu Kollisionen kommen.
  • none – Der Container hat keine Netzwerkschnitstelle und ist komplett isoliert.
  • bridge – Dies ist der Default Driver. Der Container bekommt einen eigenen IP-Bereich und ist über eine Brücke docker0 mit dem Host verbunden. Ports müssen manuell gemapped werden.
  • overlay – ein virtuelles Netzwerk über mehrere Hosts hinweg. Dadurch können rechenintensive Container oder Container mit Hochverfügbarkeit auf mehrere Hosts verteilt werden.
  • macvlan – Der Container erhält seine eigene MAC und IP im LAN.
  • ipvlan – Ist ähnlich zu macvlan, alle Container teilen ich die IP-Adresse des Hostsystems.

Dieses Driver stellt docker unter Linux bereit. Für spezielle Anforderungen lässt sich die Liste erweitern.

vorhandene Netzwerke auflisten

Mit dem Kommando

docker network ls

kannst du dir die vorhandenen networks ansehen. Bei einer frischen Dockerinstallation ohne laufende Container, erhalte ich diese Liste

Drei Netzwerke (bridge, host und none) werden automatisch eingerichtet.
raspithek.de - Olli Graf
docker-network-lsCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Drei Netzwerke (bridge, host und none) werden automatisch eingerichtet.

Diese drei networks bilden die Grundlage für die Containernetworks.

Auf meinem Nextcloud Raspi ist die Liste etwas umfangreicher.

Liste der network auf dem Nextcloud Pi
raspithek.de - Olli Graf
docker-network-ls-nextcloudCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Liste der network auf dem Nextcloud Pi

Zusätzlich zu den System Netzwerken gibt es hier noch die networks gitea_default und nextcloud_default mit dem bridge Driver. Diese werden bei Erzeugung des Containers angelegt, wenn in der docker-compose.yml kein explizites Netzwerk mit networks: angefordert wird.

Das bridge network nextcloud_nextcloudnet wurde für die Kommunikation zwischen den Containern Nextcloud Cron und Redis erzeugt.

network inspizieren

Es lassen sich ganz einfach Informationen zu einem network abrufen

docker network inspect nextcloud_nextcloudnet

Dabei wird ein JSON-Objekt mit allen Informationen geliefert. Zwecks besserer Lesbarkeit kopiere ich das Ergebnis mal komplett hier rein.

[
    {
        "Name": "nextcloud_nextcloudnet",
        "Id": "4d46a984faf84bacf2724f3b03445c70d99783be1b640dad4c44fd88c60312b8",
        "Created": "2025-08-15T09:03:38.411665603+02:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "47316f2829b54c5c0ecde3dc6d15dd0547f1a379f5e2669db1a86acd7af15b0e": {
                "Name": "redis",
                "EndpointID": "c97e0dd4e89c71aedf0c7b1d8b3bac71d04e448e5bd836082d7b6fc72fe23311",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            },
            "536c8fac1a01d0afb4137e5f1f984b8241842938eb52ac7ebc5b18b0417cb2af": {
                "Name": "nextcloud-cron",
                "EndpointID": "e4ca3d308d52eabd36720bcb18e62bee0f6910a1b8b6a3391640a8ee78210d38",
                "MacAddress": "02:42:ac:13:00:04",
                "IPv4Address": "172.19.0.4/16",
                "IPv6Address": ""
            },
            "fccef785b5e34f05376ff556293191728b44b8e3a4b1b80ee7ffe1b24e40229a": {
                "Name": "nextcloud",
                "EndpointID": "cb66c4371f27369a7ecd56778fcf995030c9a7db256502bffb383155d93e114f",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "nextcloudnet",
            "com.docker.compose.project": "nextcloud",
            "com.docker.compose.version": "1.29.2"
        }
    }
]

Du findest hier nicht nur die Angaben mit dem Zeitpunkt der Erzeugung des Netzwerks und dem verwendeten Driver. Auch alle Container, die dieses Netzwerk nutzen, sind hier aufgelistet. Letzteres ist gerade dann interessant, wenn du analysieren willst, ob ein Netzwerk noch notwendig ist.

Interessant ist, dass dem Namen des network als Präfix ein „nextcloud_“ automatisch vorangestellt wurde. Warum das so ist, konnte ich nicht genau ergründen. Ich vermute allerdings, dass beim initialen Aufsetzen von Nextcloud, der nextcloud Container der erste im .yml war, der das Netzwerk benutzte. Andere Containerdeklarationen sind erst später dazu gekommen und da war der Name mit Präfix bereits festgelegt.

network manuell anlegen

Du kannst ein network auch von Hand erzeugen. Dazu benutzt du den Befehl

docker network create -d bridge testnetwork

Das Netzwerk existiert dann völlig losgelöst von einem Container. Mit dem -d Parameter spezifizierst du den Driver des Netzwerks.

Ein network wird manuell angelegt.
raspithek.de - Olli Graf
docker-network-createCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ein network wird manuell angelegt.

Mit docker inspect schau ich mir mal an, wie testnetwork konfiguriert wurde.

[
    {
        "Name": "testnetwork",
        "Id": "b054c4ea0869349fb77e7d1aea2a8d8d7c3b8a15c2d7194189f6061433c13909",
        "Created": "2026-01-20T09:48:19.474730291+01:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.21.0.0/16",
                    "Gateway": "172.21.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

Klar zu erkennen ist hier, dass intern der IP-Adressraum 172.21.0.0.0 verwendet wird, der über die bridge nach außen abgebildet wird.

Netzwerk manuell löschen

Genauso kannst du mit dem Befehl

docker network rm testnetwork

das eben erzeugte Netzwerk wieder löschen. Hierbei solltest du vorsichtig sein! Es erfolgt keine Sicherheitsabfrage, wenn du ein network, dass an Container gebunden ist, gelöscht werden soll.

Das testnetwork wird wieder gelöscht.
raspithek.de - Olli Graf
docker-network-rmCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Das testnetwork wird wieder gelöscht.

Fazit

Über docker Netzwerke kommunizieren Container mit der Aussenwelt oder untereinander.

Schreibe einen Kommentar

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
raspithek.de - Olli Graf
WordPress Cookie Hinweis von Real Cookie Banner