Docker 容器中启用 IPv6 网络
status
Published
type
Post
slug
docker-enable-ipv6
date
Jun 24, 2021
tags
Docker
Linux
Config
summary
为 Docker 容器启用 IPv6 支持,需要在 Docker 守护进程中进行配置。在 /etc/docker/daemon.json 文件中添加以下内容:experimental 设置为 true,ipv6 设置为 true,ip6tables 设置为 true,fixed-cidr-v6 设置为一个子网。然后重启 Docker 服务。可以使用命令或 Docker Compose 创建支持 IPv6 的网络。在使用 IPv6 时需要注意修改 /etc/gai.conf 以使其优先级高于 IPv4。具体配置步骤可以参考上述文中的详细说明。
之前使用 Docker 时,默认是没有开启 IPv6 的。这几天自己的服务器升配有了 IPv6 地址,于是整理一下为 Docker 启用 IPv6 支持。
根据官网文档
在 Docker 容器中使用 IPv6 之前,需要在 Docker 守护进程中启用 IPv6 支持。只有在 Linux 主机上运行的 Docker 守护进程才支持 IPv6。
Docker 配置 IPv6 支持
修改
/etc/docker/daemon.json
,加入以下内容说明
fixed-cidr-v6
为默认桥接网络分配一个子网,启用动态 IPv6 地址分配。
ip6tables
启用额外的 IPv6 数据包过滤规则,提供网络隔离和端口映射。该参数要求experimental
设置为true
。
ipv6
在默认网络上启用 IPv6 网络。
上面我们为容器分配的是 IPv6 中的本地地址 (Unique Local Address),因为如果直接分配公共的IPv6 地址,会给我们管控 Docker 端口映射带来麻烦,服务直接暴露于公网也会带来一定安全隐患。并且当前测试的服务器只分配了一个 /128 的 IPv6 地址,也没有多余的可以分给容器了。
故我们通过 Docker 对 IPv6 NAT 的实验性支持,为其分配”内部“ IPv6 地址。
上面文件修改完成后,重启以应用配置。
此时再启动容器已经可以看到有 IPv6 地址了
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2F685dcaf9-9112-46d8-b438-56c6299f5977%2FUntitled.png?table=block&id=2365b9a0-0a7d-4451-856b-7f8884ab45c8&cache=v2)
同样我们还可以用命令创建支持 IPv6 的网络,此处
2001:db8:1::/64
是用于文档或源码演示的 IPv6 保留地址![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2F84f17de8-dac5-4f85-aba2-37e3e706265c%2FUntitled.png?table=block&id=091a28f4-91ab-4e65-b6f1-17d4b93c7da4&cache=v2)
虽然现代操作系统在 IPv4 和 IPv6 双栈网络环境下都是优先 IPv6 的,但如果地址是 ULA 的 IPv6,其优先级是低于 IPv4 的,若要使得 IPv6 依然优先,需修改
/etc/gai.conf
。Docker Compose 开启 IPv6
根据搜索到的信息,因较新版本的 Docker Swarm 不支持 IPv6 ,所以 版本号
3
下 Docker Compose 不支持创建使用 IPv6 。 下面我们通过两种方式来使用 IPv6 网络。- 使用已经创建好的 IPv6 网络
- 手动创建一个 Docker 网络,就类似上面👆那样。
- 编辑
docker-compose.yml
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2Fbb05b12c-00b0-420b-a005-da158f33c20c%2FUntitled.png?table=block&id=80ebb443-2274-4515-9814-81c9479fe097&cache=v2)
- 使用
2
版本的 docker-compose.yml
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F38eb7257-66ea-481f-b02f-6d5b3b01bb66%2Fc7838b1a-594b-41ec-8048-39537451035c%2FUntitled.png?table=block&id=5841adc1-153b-4865-9e0c-fd4512aab9b4&cache=v2)