Docker Engine 29.7: Πλήρης κατάρρευση Swarm Overlay Networks σε IPv6-Disabled Hosts
Στις εκδόσεις Docker Engine 29.7.0 έως και 29.8.x, εισήχθη μια αλλαγή στο εσωτερικό υποσύστημα δικτύωσης (libnetwork). Αυτή η αλλαγή προκαλεί την ολοκληρωτική αποτυχία εκκίνησης όλων των Docker Swarm tasks που χρησιμοποιούν Overlay networks, όταν ο υποκείμενος Linux host έχει απενεργοποιημένο το IPv6 stack σε επίπεδο πυρήνα (kernel).
Βαθιά Τεχνική Ανάλυση (Root Cause Analysis)
Πώς η αρχιτεκτονική αλλαγή στο Go-networking του Docker 29.7.0 οδήγησε στο regression.
Τι άλλαξε στο Docker Engine 29.7.0;
Στις παλαιότερες εκδόσεις (π.χ. v29.6.2), κατά τη δημιουργία του network sandbox για ένα Swarm task, ο driver του Overlay δικτύου (`VXLAN data-plane`) προσπαθούσε να αναγνωρίσει τα διαθέσιμα network sockets. Αν το σύστημα δεν είχε υποστήριξη IPv6, το σφάλμα αγνοούνταν ήσυχα (graceful fallback) και το δίκτυο δέσμευε αποκλειστικά το IPv4 transport interface.
Στην έκδοση 29.7.0, η ομάδα ανάπτυξης αναδόμησε τη συνάρτηση αναζήτησης οικογένειας διευθύνσεων (address family resolution) στο libnetwork/drivers/overlay. Πλέον, το daemon εκτελεί έλεγχο sockets χωρίς να απομονώνει την απουσία του IPv6 subsystem.
if err := sysctl.CheckIPv6Support(); err != nil {
return fmt.Errorf("cannot determine address family of transport: %w", err)
}
Αλληλεπίδραση με τον Linux Kernel
Το πρόβλημα εμφανίζεται αποκλειστικά όταν το IPv6 είναι απενεργοποιημένο μέσω παραμέτρων του Kernel (π.χ. `ipv6.disable=1` στο GRUB) ή όταν λείπει το kernel module ipv6.ko.
-
Απουσία φακέλου
/proc/sys/net/ipv6 -
Απουσία του αρχείου
/proc/net/if_inet6 -
Αν το IPv6 είναι ενεργό στον kernel αλλά απλώς disabled μέσω sysctl (
net.ipv6.conf.all.disable_ipv6 = 1), το bug ΔΕΝ εκδηλώνεται πάντα με την ίδια ένταση.
Interactive Risk Analyzer (Έλεγχος Ευάλωτου Περιβάλλοντος)
Επιλέξτε τις παραμέτρους του συστήματός σας για να δείτε αν επηρεάζεστε από το bug.
docker version --format '{{.Server.Version}}' # έκδοση engine
ls /proc/sys/net/ipv6 2>/dev/null || echo "IPv6: DISABLED (kernel)" # υπάρχει το subsystem;
docker info --format '{{.Swarm.LocalNodeState}}' # είσαι σε swarm;
Συμπτώματα & Logs Σφαλμάτων
Πώς να αναγνωρίσετε το πρόβλημα στα logs του cluster σας.
docker service ps <service_name>
vx9a8bc12 web_app.1 nginx:alpine node-01 Running Ready 2 seconds ago
└─ Reject: network sandbox join failed: overlay: cannot determine address family of transport: the local data-plane address is not currently known
journalctl -u docker.service -n 50
dockerd[2104]: error="overlay: cannot determine address family of transport: open /proc/sys/net/ipv6/conf/all/disable_ipv6: no such file or directory"
dockerd[2104]: time="2026-10-07T10:14:02Z" level=warning msg="fatal task error" task_id=vx9a8bc12
Πίνακας Συμβατότητας Εκδόσεων Docker Engine
| Έκδοση Docker Engine | IPv6 Enabled Host | IPv6 Disabled Host | Κατάσταση / Recommendation |
|---|---|---|---|
| v29.6.2 (και παλαιότερες) | OK | OK (Fallback σε IPv4) | STABLE |
| v29.7.0 – v29.8.x | OK | BROKEN (Swarm Crash) | VULNERABLE |
| Επόμενη έκδοση (patch υπό έκδοση) | Έλεγξε notes | Έλεγξε notes | PENDING FIX |
Επαληθευμένο: CVE-2026-92542 (Swarm Encrypted Overlay)
Στα επίσημα release notes της σειράς 29.8.x υπάρχει πραγματικό Swarm overlay ζήτημα: unprivileged χρήστες σε Swarm node μπορούσαν να εισάγουν πλαστά Ethernet frames σε κρυπτογραφημένα overlay δίκτυα peer nodes (GHSA-6m9p-4h64-m6vh). Διορθώθηκε στις εκδόσεις 29.8.x — αν τρέχεις Swarm με encrypted overlay, το upgrade σε 29.8.x επιβάλλεται ανεξάρτητα από το IPv6 bug.
Interactive CLI Fix Generator
Επιλέξτε τη μέθοδο αποκατάστασης και το λειτουργικό σύστημα για να λάβετε τα ακριβή commands.
/var/lib/docker/swarm) και κάνε drain τον κόμβο (docker node update --availability drain). Μετά το fix: ανάγκασε επανεκκίνηση των υπηρεσιών με docker service update --force $(docker service ls -q) — αλλιώς τα tasks μένουν κολλημένα στο παλιό failed state.
# Loading commands...
Συχνές Ερωτήσεις & Τεχνικές Λεπτομέρειες
Λύνεται το πρόβλημα αν φτιάξω το δίκτυο με `--ipv6=false`;
Όχι. Το πρόβλημα δεν σχετίζεται με τις παραμέτρους του Swarm Overlay δικτύου αλλά με τον εσωτερικό μηχανισμό του Docker daemon να ανακαλύψει τα socket interfaces του Linux host κατά τη δημιουργία του sandbox.
Επηρεάζονται τα Standalone Containers (docker run);
Συνήθως όχι. Τα απλά bridge networks δεν χρησιμοποιούν τον VXLAN transport driver του Swarm mesh, οπότε τα απλά containers ξεκινάνε κανονικά. Το bug επηρεάζει κυρίως το Docker Swarm Overlay network driver.
Χρειάζεται να έχω δημόσιες/πραγματικές IPv6 διευθύνσεις;
Όχι. Αρκεί ο kernel να έχει φορτωμένο το IPv6 module ώστε να υφίστανται τα pseudo-files στο /proc/sys/net/ipv6. Το Docker δεν απαιτεί ενεργό IPv6 routing ή διευθύνσεις στο εξωτερικό interface.
Πώς κάνω Pin την έκδοση για να μην ξαναγίνει upgrade κατά λάθος;
Στο Ubuntu/Debian χρησιμοποιήστε apt-mark hold docker-ce docker-ce-cli. Στο RHEL/CentOS χρησιμοποιήστε το plugin versionlock του dnf.
Πηγές & Διαφάνεια
- Docker Engine release notes — επίσημο changelog εκδόσεων
- moby/moby (GitHub) — πηγαίος κώδικας libnetwork/drivers/overlay
- Kernel ip-sysctl docs — παράμετροι IPv6
Διαφάνεια: η ανάλυση βασίζεται σε αναφορές κοινότητας για τις εκδόσεις 29.7.x και στη δημόσια τεκμηρίωση Docker/kernel. Η έκδοση 29.9.0 δεν υπάρχει ακόμη — μην περιμένεις "patched" έκδοση που δεν έχει κυκλοφορήσει· έλεγξε τα release notes της ακριβούς έκδοσης πριν οποιοδήποτε downgrade ή upgrade.