只需四步,让docker容器内使用ipv6

如何让docker容器可在ipv6环境下被访问?其实并不需要特别地设置,只需要将对应的端口暴露在外网(映射)即可。只要宿主机具有ipv6地址就可以被访问。

不过,本文的重点是:如何可以让docker容器内部使用ipv6网络访问互联网?其实方法也很简单,只需四步。

1.编辑 /etc/docker/daemon.json,写入以下配置开启ipv6支持(如果已经存在一些现有的其他配置,那么只需要把 “ipv6”: true 等等一行加到括号内的末尾即可。

{
  "ipv6": true,
  "fixed-cidr-v6": "fd10::/80"
}

添加之后需要重新启动服务。

2.创建一个支持ipv6的docker网络,分配子网时使用私网ipv6地址。

# docker network create --ipv6 --subnet fd00::/80 anet

其中 “anet”为网络的名称,可随意更改,”fd00::/80” 为私网ipv6地址段。

3.创建ip6tables规则,为私网地址设置流量转发。(命令仅能起到临时生效作用,如果需要永久生效,则需要将其写入到配置文件)

# ip6tables -t nat -A POSTROUTING -s fd00::/80 ! -o docker0 -j MASQUERADE

如需将规则写入到配置文件,那么只需要写入下面一段:

-A POSTROUTING -s fd00::/80 ! -o docker0 -j MASQUERADE

4.创建docker容器时,指定 –network [name] 加入刚才创建的ipv6网络。例如下面这个例子

# docker run --name=webmail --network anet --restart always -i -t -d -p 80:80/tcp -443:443/tcp ubuntu /start.sh

经过以上操作,docker容器内就可以使用ipv6网络啦,这时可以使用ping检查一下。如果出现类似于下方的这个例子,说明配置当前已经成功。

# ping -6 google.com

PING google.com (2a00:1450:4001:809::200e): 56 data bytes
64 bytes from 2a00:1450:4001:809::200e: seq=0 ttl=53 time=1.234 ms
64 bytes from 2a00:1450:4001:809::200e: seq=1 ttl=53 time=1.611 ms
64 bytes from 2a00:1450:4001:809::200e: seq=2 ttl=53 time=1.860 ms
64 bytes from 2a00:1450:4001:809::200e: seq=3 ttl=53 time=1.769 ms
--- google.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 12.769/16.618/19.611 ms

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注