docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker容器参数LinkLocalIPv6Address和LinkLocalIPv6PrefixLen

docker容器参数LinkLocalIPv6Address和LinkLocalIPv6PrefixLen使用及说明

作者:岳来

链路本地地址(LinkLocalIPv6Address)是IPv6中的一种特殊地址类型,仅在同一物理/逻辑链路(如单个子网)内有效,Docker为容器的虚拟网络接口分配的IPv6链路本地地址,生成方式:基于容器的MAC地址自动生成(EUI-64格式)

LinkLocalIPv6AddressLinkLocalIPv6PrefixLenLink-Local IPv6 Address

它们不是用户可配置的参数,而是 Docker 在创建容器时自动生成并暴露给用户查询的信息。

一、什么是 IPv6 链路本地地址(Link-Local Address)?

定义

作用

所有启用了 IPv6 的网络接口必须有一个链路本地地址

二、Docker 中的 LinkLocalIPv6Address 和 LinkLocalIPv6PrefixLen

2.1、 LinkLocalIPv6Address

Docker 为容器的虚拟网络接口(如 eth0)分配的 IPv6 链路本地地址。

生成方式:

特点:

2.2、 LinkLocalIPv6PrefixLen

"LinkLocalIPv6Address": "fe80::42:acff:fe11:2233",
"LinkLocalIPv6PrefixLen": 64

三、如何查看这两个字段?

3.1、docker inspect

docker inspect <container-name> | grep -A5 LinkLocalIPv6

输出示例:

"LinkLocalIPv6Address": "fe80::42:acff:fe11:2233",
"LinkLocalIPv6PrefixLen": 64,

3.2、在容器内部查看

docker exec -it <container> ip addr show eth0

输出:

2: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet6 fe80::42:acff:fe11:2233/64 scope link

四、重要注意事项

4.1、 仅当 Docker 启用 IPv6 时存在

默认情况下,Docker 不启用 IPv6

需在 /etc/docker/daemon.json中开启:

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

即使未配置全局 IPv6,链路本地地址仍会自动生成(因为它是 IPv6 基础功能)

4.2.、不能用于跨主机通信

fe80::/10 地址不能跨路由器

容器只能用它和同一 Docker 网络内的其他容器通信

4.3、 不是用户可配置项

你不能通过 docker run --link-local-ipv6 … 设置它

它由 Docker daemon 自动生成

4.4、与 --ipv6 参数无关

即使运行容器时加了 --ipv6,这个地址也依然存在(只要内核支持 IPv6)

五、实际用途

场景说明
容器间底层通信Docker 内部使用链路本地地址进行 ARP 替代(NDP)
调试网络问题通过 ping6 fe80::…%eth0 测试同网络连通性
服务发现(高级)某些 P2P 协议使用链路本地地址做初始握手

六、FAQ

6.1、为什么我的容器没有 LinkLocalIPv6Address?

原因:宿主机内核禁用了 IPv6

解决:

# 检查
cat /proc/sys/net/ipv6/conf/all/disable_ipv6  # 0=启用, 1=禁用
# 启用
echo 0 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6

6.2、能否禁用链路本地地址?

不能。

它是 IPv6 协议栈的基础组成部分,禁用会导致网络异常。

6.3、这个地址会冲突吗?

不会。

因为基于 MAC 地址生成,而 Docker 保证容器 MAC 唯一。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文