手把手教你如何給 Docker 開(kāi)啟 IPv6 網(wǎng)絡(luò)支持

Docker默認(rèn)是不開(kāi)啟IPv6支持的,但是我們某些業(yè)務(wù)往往又需要IPv6的支持,特別是IPv6普及大勢(shì)所趨,本文主要介紹的是如何開(kāi)啟Docker橋接網(wǎng)絡(luò)IPv6支持,這篇文章具體操作僅供參考,建議以官方文檔為準(zhǔn)。
本文最重要的先決條件是主機(jī)商已經(jīng)分配給你一個(gè)公網(wǎng)IPv6地址段,我們可以通過(guò)查看主機(jī)控制面板中信息、詢(xún)問(wèn)主機(jī)供應(yīng)商或者直接SSH登錄主機(jī)使用命令ip -f inet6 addr show eth0獲取。命令方式獲取的ipv6地址輸出如下:
6: eth0: mtu 9000
inet6 2607:f0d0:1002:51::4/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::230:48ff:fe33:bc33/64 scope link
valid_lft forever preferred_lft forever
其中inet6 2607:f0d0:1002:51::4/64 scope global這行指示的IPv6地址是我們需要的目標(biāo)地址,注意我們這里選取的是公網(wǎng)IP,也就是后面scope global指示的,大家注意到后續(xù)還有一個(gè)fe80開(kāi)頭的IPv6地址,這個(gè)后面沒(méi)有g(shù)lobal,也就是通常意義內(nèi)網(wǎng)IPv6,本文不使用,當(dāng)然讀者可以根據(jù)實(shí)際需要選擇內(nèi)網(wǎng)IPv6繼續(xù)參照下面介紹的步驟完成操作。
1IPv6地址段劃分
Docker可以配置多個(gè)虛擬網(wǎng)絡(luò),對(duì)于IPv4來(lái)說(shuō)通過(guò)形如172.17.0.1/16、172.18.0.1/16、172.19.0.1/16這樣內(nèi)網(wǎng)私有IP地址段配置多個(gè)IPv4虛擬網(wǎng)段,那么同樣的道理IPv6也建議劃分多個(gè)段,如果手動(dòng)劃分不便,可以通過(guò)IPv6 Subnetting Calculator自動(dòng)劃分,如下圖所示:

比如剛才的IPv6地址劃分為4個(gè)網(wǎng)段如下:
2607:f0d0:1002:51::/66
2607:f0d0:1002:51:4000::/66
2607:f0d0:1002:51:8000::/66
2607:f0d0:1002:51:c000::/66
2配置默認(rèn)Docker IPv6
編輯Docker配置文件/etc/docker/daemon.json,如果該文件不存在,請(qǐng)手動(dòng)建立。配置文件內(nèi)容如下,如果你已有的配置文件缺少相應(yīng)的配置項(xiàng),添加上即可,沒(méi)有必要完全覆蓋內(nèi)容。
{
"experimental": true,
"ipv6": true,
"ip6tables": true,
"fixed-cidr-v6": "2607:f0d0:1002:51::/66"
}
這里ip6tables是指由Docker自動(dòng)配置IPv6的防火墻規(guī)則,如果你希望自己手動(dòng)配置,請(qǐng)改為false或者移除此項(xiàng),否則容器將無(wú)法連接IPv6網(wǎng)絡(luò);fixed-cidr-v6則是我們劃分的子網(wǎng)段的第一個(gè),這里僅作示例請(qǐng)讀者根據(jù)實(shí)際情況修改。
完成配置后請(qǐng)使用systemctl restart docker重啟docker服務(wù)生效。完成此步后Docker算是完成對(duì)于IPv6的支持了。
3配置Docker Compose的IPv6支持(可選)
這個(gè)主要是我編排容器時(shí)用的比較多,這里也記錄一下作為一個(gè)備忘吧。
Docker Compose的配置文件內(nèi)容關(guān)于IPv6部分重點(diǎn)是網(wǎng)絡(luò)節(jié)配置,如果另外配置網(wǎng)絡(luò)的話,必須選擇與默認(rèn)daemon.json不同的IPv6子網(wǎng)段,例如:
networks:
example:
enable_ipv6: true
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
config:
- subnet: 172.23.0.0/16
- subnet: "2607:f0d0:1002:51:4000::/66"
gateway:2607:f0d0:1002:51:4000::1
這里example網(wǎng)絡(luò)我們通過(guò)配置開(kāi)啟IPv6支持,其中網(wǎng)絡(luò)段配置IPv4是172.23.0.0/16,IPv6選用余下的第二個(gè)網(wǎng)段2607:f0d0:1002:51:4000::/66注意這里不能和daemon.json配置的IPv6網(wǎng)段一樣。這里的IP配置同樣是一個(gè)示例,讀者請(qǐng)根據(jù)實(shí)際情況進(jìn)行修改。
參考資料
https://docs.docker.com/config/daemon/ipv6/
往期推薦
關(guān)注「開(kāi)源Linux」加星標(biāo),提升IT技能
點(diǎn)個(gè)在看少個(gè) bug ??

