First of all: my VPS provider (thanks, Philip!) was so friendly to provide & route a separate IPv6 subnet to my VPS, which I used for Docker:
- Separate subnet provided by my VPS provider: 2001:AAAA:FF00:1700::/56
- Sub-subnet used for Docker: 2001:AAAA:FF00:1700::/64
(Note: AAAA is a placeholder for the real hex digits)
First check you have at least docker 1.5:
sander@makreel:~$ sudo docker --version
Docker version 1.5.0, build 7e803ba
Stop de docker daemon:
sudo service docker stop
To avoid
FATA[0000] bridge IPv6 does not match existing bridge configuration fe80::1
do this:
sudo apt-get install bridge-utils
sudo ifconfig docker0 down
sudo brctl delbr docker0
Then start the docker daemon with IPv6 and the IPv6 subnet:
sudo docker -d --ipv6 --fixed-cidr-v6="2001:AAAA:FF00:1700::/64"
And that's it! The docker daemon is ready, and you don't need any special settings in the docker container. Let's check that:
Check IPv6 within a ubuntu container:
sander@makreel:~$ sudo docker run -it ubuntu bash -c "ifconfig"
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:0a
inet addr:172.17.0.10 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:a/64 Scope:Link
inet6 addr: 2001:aaaa:ff00:1700:0:242:ac11:a/64 Scope:Global
UP BROADCAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:110 (110.0 B) TX bytes:90 (90.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Looks good.
Check you have outside IPv6 connectivity
sander@makreel:~$ sudo docker run -it ubuntu bash -c "ping6 -c5 ipv6.google.com"
PING ipv6.google.com(2a00:1450:400c:c07::64) 56 data bytes
64 bytes from 2a00:1450:400c:c07::64: icmp_seq=3 ttl=56 time=7.12 ms
64 bytes from 2a00:1450:400c:c07::64: icmp_seq=4 ttl=56 time=7.05 ms
64 bytes from 2a00:1450:400c:c07::64: icmp_seq=5 ttl=56 time=7.28 ms
--- ipv6.google.com ping statistics ---
5 packets transmitted, 3 received, 40% packet loss, time 4019ms
rtt min/avg/max/mdev = 7.056/7.152/7.280/0.116 ms
sander@makreel:~$
Good! So IPv6 is working!
Speedtest:
$ sudo docker run -it ubuntu bash -c "apt-get update && apt-get install -y wget && wget -6 'http://ftp.belnet.be/ubuntu.com/ubuntu/releases/precise/ubuntu-12.04.4-desktop-i386.iso' -O /dev/null"
...
100%[======================================>] 766,509,056 8.25MB/s in 97s
2015-02-17 12:16:50 (7.52 MB/s) - '/dev/null' saved [766509056/766509056]
sander@makreel:~$
Note: the official documentation https://docs.docker.com/articles/networking/#ipv6-with-docker does not state you need a separate IPv6 subnet. Strange.