Docker doesn't really support IPv6. You can sort of get it to work in very specific circumstances, but on the whole, the support for IPv6 is non-existent or in it's infancy.
Docker swarm does not support IPv6.
Docker overlay networks do not support IPv6.
Save yourself some time. It's not going to happen.
Caveat Following these instructions will end up with a jerry rigged swarm with some support for IPv6.
- moby/moby#24379
- moby/moby#43615
- moby/moby#43643
- https://github.com/b-data/docker-swarm-ipv6-nftables/blob/main/NOTES.md#ipv6-connectivity
- https://dockerswarm.rocks/traefik/#getting-the-client-ip
- https://pandurangaraju50.medium.com/docker-swarm-setup-on-ipv6-network-centos-98044a1f482b
Docker to be installed.
If you have created your swarm, uncreate it. Your servers should have docker installed and running - but no containers or networks defined. Seriously.
sudo DEBIAN_FRONTEND=noninteractive apt-get -y install sipcalc && \
sudo curl -L "https://gist.githubusercontent.com/troykelly/749b48712d0d777030e7dd5d64916744/raw/docker-ipv6" -o /etc/dhcp/dhclient-enter-hooks.d/docker-ipv6 && \
sudo chmod +x /etc/dhcp/dhclient-enter-hooks.d/docker-ipv6 && \
sudo curl -L "https://gist.githubusercontent.com/troykelly/749b48712d0d777030e7dd5d64916744/raw/99-ipv6.conf" -o /etc/sysctl.d/99-ipv6.conf && \
sudo curl -L "https://gist.githubusercontent.com/troykelly/749b48712d0d777030e7dd5d64916744/raw/dhclient6-pd.service" -o "/etc/systemd/system/dhclient6-pd.service" && \
sudo mkdir -p /etc/systemd/system/docker.service.d && \
sudo curl -L "https://gist.githubusercontent.com/troykelly/749b48712d0d777030e7dd5d64916744/raw/ipv6.conf" -o /etc/systemd/system/docker.service.d/ipv6.conf && \
iface=$(ip -o -4 route show to default | awk '{print $5}' | head -n1) && sudo sed -i "s/\(Environment=NETWORK_INTERFACE=\).*/\1${iface}/" /etc/systemd/system/dhclient6-pd.service && sudo sed -i "s/\.eth0\./.${iface}./g" /etc/sysctl.d/99-ipv6.conf && \
sudo sysctl -p /etc/sysctl.d/99-ipv6.conf && \
sudo systemctl daemon-reload && \
sudo systemctl enable dhclient6-pd && \
sudo systemctl start dhclient6-pd && \
sleep 10 && \
cat /etc/docker/ipv6.prefix && \
docker network create \
--ipv6 \
--subnet 172.20.0.0/20 \
--gateway 172.20.0.1 \
--gateway fd00:3984:3989::1 \
--subnet fd00:3984:3989::/64 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=true \
--opt com.docker.network.bridge.enable_ip_forwarding=true \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge
...if you need
docker run --rm -it alpine ash -c "ip -6 addr show dev eth0; ip -6 route show"