Enabling IPv6 in Docker via daemon.json breaks IPv6 connectivity on the host
// This is my first time reporting bug to Alpine and I'm terribly sorry if I'm missing something.
Enabling IPv6 in Docker engine via daemon.json breaks IPv6 connectivity. To be exact, Docker removes default IPv6 route upon start.
Environment:
# cat /etc/alpine-release
3.13.3
# docker info |fgrep 'Server Version'
Server Version: 20.10.3
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
hostname tpl-alpine-docker
iface eth0 inet6 manual
# cat /etc/docker/daemon.json
{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80"
}
IPv6 route table before docker restart with the config above:
# ip -6 route show
2400:4153:xxxx:xxxx::/64 dev eth0 metric 256 expires 0sec
fe80::/64 dev eth0 metric 256
default via fe80::ae44:f2ff:fe66:c7d4 dev eth0 metric 1024 expires 0sec
multicast ff00::/8 dev eth0 metric 256
Table after docker restart:
# ip -6 route show
2400:4153:xxxx:xxxx::/64 dev eth0 metric 256 expires 0sec
fd00::/80 dev docker0 metric 256
fd00::/80 dev docker0 metric 1024
fe80::/64 dev eth0 metric 256
fe80::/64 dev docker0 metric 256
anycast 2400:4153:xxxx:xxxx:: dev eth0 metric 0
anycast fe80:: dev eth0 metric 0
multicast ff00::/8 dev eth0 metric 256
# ping6 google.com
PING google.com (2404:6800:400a:807::200e): 56 data bytes
ping6: sendto: Network unreachable
Network seems to be fixed after placing default route back, but to be perfectly frank I don't know IPv6 well enough to be sure that this is correct fix:
# ip -6 route replace default via fe80::ae44:f2ff:fe66:c7d4 dev eth0
# ping6 google.com
PING google.com (2404:6800:400a:808::200e): 56 data bytes
64 bytes from 2404:6800:400a:808::200e: seq=0 ttl=116 time=6.018 ms