IPv6 in Docker zu konfigurieren ist sehr einfach. Es gibt nur eine Voraussetzung, aber ein paar Punkte die man beachten sollte.

Das wichtigste zuerst, man benötigt einen festen IPv6 Präfix. Dieser muss konstant sein und darf sich nicht ändern. Das ist bei alle normalen Hosting Providern der Fall.

Die Docker Dokumention zu IPv6 ist leider für die meisten Anwender nicht richtig, den es fehlt ein entscheidender Punkt. Die IPv6 Option muss nicht nur auf „True“ gesetzt werden, es muss auch gleich für das Default Netzwerk (bridge) ein IPv6 Präfix gesetzt werden. Sonst wird der Docker Daemon nicht starten.

Die meisten Provider vergeben ein /64-Netz, daher kann man sehr gut ein /80-Netz für jedes Docker Netzwerk verwenden. In diesem Beispiel wurde dem Server dieser IPv6 Präfix zugeteilt 2001:DB81:12A:C343::/64  Um ein /80-Netz zu erhalten fügt man einfach 4 Weitere Zeichen dem Präfix Teil hinzu (z.B. 2001:DB81:12A:C343:1234::/80 ).

Wenn IPv6 aktiviert wurde, hat das Default Netz (bridge) IPv6. IPv6 kann in diesem Netz auch nicht deaktiviert werden. Es macht daher Sinn, für einzelne Container oder Gruppen von  Containern selbst definierte Netzwerke zu erstellen. Dann kann man ganz individuell entscheiden ob ein Container oder eine Gruppen von Containern Zugang zu einem IPv6 Netz haben soll oder nicht.

Um IPv6 in Docker zu aktiveren, fügt man der Datei /etc/docker/daemon.json folgen Inhalt hinzu. Fall es die Datei noch nicht gibt, muss man sie erstellen.

{
"ipv6": true,
"fixed-cidr-v6": "2001:DB81:12A:C343:1234::/80"
}

Wichtig ist das fixed-cidr-v6 mit einem /80-Netz. Dieser IPv6-Präfix wird für das Default Netz verwendet.

Wenn der Docker Daemon nun neu gestartet wird sollten die Container im Default Netzwerk eine IPv6 Adresse erhalten haben. Es gibt kein SLAAC, der Docker Daemon weist jedem Container eine IPv6 zu. 

Falls zwar eine IPv6 Adresse im Container vorhanden ist, aber keine IPv6 Verbindung ins Internet möglich ist, benötigt man wahrscheinlich ein Neighbor Discovery Proxy wie ndppd. Diesen muss man dann auf dem Docker Host laufen lassen.

Um ein eigenes Docker Netzwerk mit IPv6 zu erstellen kann man folgenden Befehl verwenden.

docker network create --ipv6 --subnet 2001:DB81:12A:C343:4321::/80 mein-netz

Es handelt sich hierbei um ein bridge Netzwerk und hat in diesem Beispiel den Namen „mein-netz“. Neben IPv6 wird vom Docker Daemon auch ein eigenes IPv4 Sub-Netz definiert. Es ist wichtig ein anders /80-Netz als beim Default Netz zu verwenden. Um das Netz zu verwenden muss man den --network mein-netz Parameter zum Docker Befehl hinzufügen.

docker run --network mein-netz hello-world

Als nächstes muss man sich nun Gedanken um die Sicherheit der Docker Container machen. Den diese haben nun eine öffentlich erreichbare IP Adresse. Es gibt ein NAT mehr. Eine Portweiterleitung ist nicht mehr nötig den alle offenen Ports sind für alle zu erreichen. Es ist daher dringend geboten ein paar Firewall Regel zu erstellen.

Docker mit IPv6