Docker容器支持IPv6的方法

1.设置Docker Engine支持IPv6

1) 启动Docker Engine时即开启对IPv6的支持

默认启动时Docker Engine只支持IPv4。

启动Docker Engine时,指定--ipv6选项即可支持IPv6。

2) 对于已经启动的Docker Engine开启对IPv6的支持

配置/etc/docker/daemon.json文件如下。

{
  "ipv6": true,
  "fixed-cidr-v6": "fd00:daad:beee::/48"
}

说明:Docker Engine支持IPv6后,docker0将拥有IPv6的link-local地址fe80::1。但要使得docker0拥有IPv6的global地址,还需要设置--fixed-cidr-v6,以指定Docker容器实例可用的IPv6子网。

执行systemctl reload docker重载Docker Engine的配置文件,Docker Engine将会添加几条新的路由规则到iptables。以上述配置文件为例,Docker Engine将会执行如下等价操作:

$ ip -6 route add fd00:dead:beef::/48 dev docker0
$ sysctl net.ipv6.conf.default.forwarding=1
$ sysctl net.ipv6.conf.all.forwarding=1

如果Docker宿主机的网卡(例如eth0)是通过路由广播获取Docker Engine的IPv6配置参数,则上述配置文件的生效将引起Docker Engine将会执行如下等价操作:

$ ip -6 route add fd00:dead:beef::/48 dev docker0
$ sysctl net.ipv6.conf.default.forwarding=1
$ sysctl net.ipv6.conf.all.forwarding=1
$ sysctl net.ipv6.conf.eth0.accept_ra=2

2 创建Docker网络支持IPv6

事实上,Docker Engine支持IPv6后,Docker Engine默认的bridge网络就支持IPv6,直接使用bridge网络即可(默认即使用bridge网络)。

如果要使用定制网络,则创建网络时docker network create带--ipv6选项,示例如下:

docker network create -d bridge --ipv6 --subnet "fd00:daad:beee:1::/64" --gateway="fd00:daad:beee::1" --subnet=172.18.0.0/16 --gateway=172.18.0.1 myNet

3 创建容器实例支持IPv6

Docker Engine支持IPv6后,创建容器时docker run带--ip6选项即可。

注意,如果docker run命令带--ip或--ip6选项,则其网络不能是默认的bridge网络,否则会抛出如下异常:

user specified IP address is supported on user defined networks only.

必须为创建的容器采用定制网络,才能够通过--ip或--ip6选项指定容器实例的IP。

首先要保证定制网络(如myNet)支持IPv6,然后创建容器时docker run带--ip6选项和--network=myNet即可。

docker run -itd -P --ip=172.18.0.101 --ip6="fd00:daad:beee:1::101" --network=myNet --name=my101 centos:7

 

参考链接:

https://docs.docker.com/config/daemon/ipv6/

https://docs.docker.com/v17.09/engine/userguide/networking/default_network/ipv6/#how-ipv6-works-on-docker

https://github.com/moby/moby/issues/29443#issuecomment-495808871

发布了405 篇原创文章 · 获赞 634 · 访问量 201万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览