Linux系统中给Docker开启IPv6
鉴于网上的教程太多,而且很多是旧资料,并且官网的资料也是既不清晰又不准确,因此这里记录一个简单可行(2024年2月)的操作步骤。
本教程前置条件
- Linux系统
- 服务器有固定IPv6地址,而且进行了正确配置。
- 单节点
一、查询服务器的IP段
使用ip addr
或ifconfig
命令查询一下服务器的IPv6地址段:
# ip addr
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f2:3c:92:24:24:c2 brd ff:ff:ff:ff:ff:ff
inet ***.***.***.***/24 brd ***.***.***.*** scope global eth0
valid_lft forever preferred_lft forever
inet6 2400:1234::bbbb:cccc:dddd:eeee:ffff/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 5117sec preferred_lft 1517sec
inet6 fe80:1234:aaaa:bbbb:cccc:dddd:eeee:ffff/64 scope link
valid_lft forever preferred_lft forever
...
从上面可知,服务器的IP地址是2400:1234::bbbb:cccc:dddd:eeee:ffff
,掩码64位,所以IP段就应该是2400:1234:0:bbbb::/64
二、配置Docker开启IPv6
编辑/etc/docker/deamon.json
文件:
{
"ipv6": true,
"fixed-cidr-v6": "2400:1234:0:bbbb::/64",
"experimental": true,
"ip6tables": true
}
fixed-cidr-v6
部分替换成你的服务器的IP段。
重启Docker,重启完成后输入docker network inspect bridge
,在输出内容中找到EnableIPv6
,如果它的值是true,说明Docker已开启IPv6。
三、使容器启用IPv6
docker run模式
创建一个支持IPv6的网络:
docker network create --ipv6 --subnet="fc00:0:0:1::/64" mynet
其中fc00:0:0:1::/64
也可以换成其他内网网段。
删掉现有容器,然后重新创建容器,并使用--network
参数指定网络,例如
docker run -d -v xxxx -p xxxx --network mynet xxxx/xxxx
容器启动成功后,使用docker
inspect查看容器信息,如果其中的GlobalIPv6Address
出现IPv6地址说明启用成功。
docker-compose模式
修改docker-compose.yaml配置文件,在最后面增加(如果已有类似内容,请根据实际情况调整):
networks:
default:
enable_ipv6: true
ipam:
config:
- subnet: fc00:0:0:1::/64
删除现有容器,然后使用docker network ls
和docker network rm xxx
删除compose创建的网络。容器和网络删除完成后,使用docker compose up -d
来重新创建容器。
如果在docker compose up -d
时报错,提示pool overlaps with other one on this address space
,说明你忘记删除network了,手工删掉即可。
容器启动成功后,使用docker
inspect查看容器信息,如果其中的GlobalIPv6Address
出现IPv6地址说明启用成功。