启用Docker对ipv6的支持
我的环境:
- OS: CentOS 7.9
- Docker:20.10.7
1. 启用Docker守护进程对ipv6的支持
要想在Docker容器或者Swarm服务中使用ipv6,首先需要在Docker守护进程中启用对ipv6的支持,具体做法如下:
编辑docker守护进程的配置文件
/etc/docker/daemon.json
(若不存在需要手动创建该文件){"experimental": true,"ip6tables": true,"ipv6": true,"fixed-cidr-v6": "2001:db8:1::/64"}
ipv6
设置为true,启用对ipv6的支持。
fixed-cidr-v6
,配置ipv6子网。
ip6tables
,启用ip6tables,docker会在ip6tables中配置docker网络相关的规则链。
experimental
,启用实验特性,ip6tables是docker的一个实验功能,所以需要设为true。重载配置文件
sudo systemctl reload docker && sudo systemctl restart docker
现在你可以使用
docker network create --ipv6 ...
创建一个支持ipv6的网络了。另外你也可以在启动容器时使用--ip6
参数来使容器支持ipv6。审查默认
bridge
网络sudo docker network inspect bridge
可以看到已经配置成功!
接下来就可以在容器中使用ipv6了!
2. 在Docker容器中使用ipv6
注意:以下演示依赖于上一步的配置
2.1 创建一个容器
使用nginx做演示:
启动一个容器,此处并没有指定网络所以默认使用名为bridge
的网络,该网络在上一步已经支持ipv6了!
docker run --name test -p 81:80 -d nginx:1.21.6
进入容器内部查看网阔配置:
$ docker exec -it test ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.156.10.2 netmask 255.255.255.0 broadcast 10.156.10.255inet6 fe80::42:aff:fe9c:a02 prefixlen 64 scopeid 0x20<link>inet6 2001:db8:1::242:a9c:a02 prefixlen 64 scopeid 0x0<global>ether 02:42:0a:9c:0a:02 txqueuelen 0 (Ethernet)RX packets 3923 bytes 9184337 (8.7 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 2836 bytes 192127 (187.6 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
容器内部已经分配了一个ipv6地址!
2.2 容器与宿主机通信
在上一步容器已经有一个ipv6地址了,但是如果宿主机没有一个合适的ipv6地址还是不能通过ipv6与宿主机通信。比如下面我用的宿主机网络配置:
$ ifconfig ens192
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.30.72 netmask 255.255.0.0 broadcast 192.168.255.255inet6 fe80::54f2:a4e2:f5cc:711a prefixlen 64 scopeid 0x20<link>ether 00:0c:29:c7:26:f5 txqueuelen 1000 (Ethernet)RX packets 38098236 bytes 6981689290 (6.5 GiB)RX errors 0 dropped 3567426 overruns 0 frame 0TX packets 953026 bytes 578286181 (551.4 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
尽管该接口有一个ipv6地址fe80::54f2:a4e2:f5cc:711a
但是它是本地链路上的私有地址(fe80开头的地址属于私有地址)。私有地址是允许在本地链路上使用,且数据包不会跨链路转发。
所以,容器要想和宿主机通信,宿主机必须有一个非私有ipv6地址,如果默认没有就需要手动配置一个:
编辑网络接口配置文件/etc/sysconfig/network-scripts/ifcfg-ifName
,例如我的测试宿主机网卡名称为ens192
,那就编辑/etc/sysconfig/network-scripts/ifcfg-ens192
:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_PRIVACY=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPV6ADDR=2018::27
NAME=ens192
UUID=08b8bead-340c-4708-8656-2af2394a7c1c
DEVICE=ens192
ONBOOT=yes
IPADDR=192.168.30.72
PREFIX=16
GATEWAY=192.168.30.1
DNS1=223.5.5.5
保存,执行网络服务重启:
sudo systemctl restart network
查看网卡配置:
$ ifconfig ens192
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.30.72 netmask 255.255.0.0 broadcast 192.168.255.255inet6 2018::27 prefixlen 64 scopeid 0x0<global>inet6 fe80::54f2:a4e2:f5cc:711a prefixlen 64 scopeid 0x20<link>ether 00:0c:29:c7:26:f5 txqueuelen 1000 (Ethernet)RX packets 38106119 bytes 6982319769 (6.5 GiB)RX errors 0 dropped 3568059 overruns 0 frame 0TX packets 953451 bytes 578328655 (551.5 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
再次进行容器内ping宿主机:
$ sudo docker exec -it test ping6 2018::27
PING 2018::27(2018::27) 56 data bytes
64 bytes from 2018::27: icmp_seq=1 ttl=64 time=0.135 ms
64 bytes from 2018::27: icmp_seq=2 ttl=64 time=0.137 ms
64 bytes from 2018::27: icmp_seq=3 ttl=64 time=0.145 ms
64 bytes from 2018::27: icmp_seq=4 ttl=64 time=0.137 ms
64 bytes from 2018::27: icmp_seq=5 ttl=64 time=0.152 ms
^C
--- 2018::27 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.135/0.141/0.152/0.006 ms
已经通了!
3. 使docker-compose 编排文件启动的服务支持ipv6
以下操作也须在docker引擎开启ipv6下进行。
3.1 对于版本2的编排文件
对于版本2的编排文件,可以直接在networks
配置节点下启用ipv6,下面是个例子:
version: '2'# 其他services定义省略。。。
networks:example:enable_ipv6: truedriver: bridgedriver_opts:com.docker.network.enable_ipv6: "true"ipam:config:- subnet: 172.23.0.0/16- subnet: "2607:f0d0:1002:51:4000::/66"
3.2 对于版本3的编排文件
对于版本3的编排文件,无法像上边那样直接在编排文件中配置网络并开启ipv6,需要按照下面的方式进行:
首先需要通过命令行创建一个网络并启用ipv6:
$ sudo docker network create -d bridge \--ipv6 --subnet 2001:db8:1::1/64 \--subnet 10.156.11.0/24 extnetwork
通过上面的命令创建了一个子网为2001:db8:1::1/64
的名字为extnetwork
的ipv6网络且支持ipv4。
编排文件:
version: '3'
services:app:image: app:7.16.1container_name: apprestart: alwaysprivileged: truenetworks:- extnetwork #省略其他服务。。。networks:extnetwork:external: true
启用Docker对ipv6的支持相关推荐
- 手把手教你如何给 Docker 开启 IPv6 网络支持
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Docker默认是不开启IPv6支持的,但是我们某些业务往往又需要IPv6的支持,特别是IPv ...
- 在Docker里使用(支持镜像继承的)supervisor管理进程(转)
这篇文章是受 dockboard 之托帮忙翻译的与 docker 有关的技术文章.译自 Using Supervisor with Docker to manage processes (suppor ...
- docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...
- 软件驱动安装在docker_别为Docker本地实现不支持GPU发愁,解决方案在此!
原标题:别为Docker本地实现不支持GPU发愁,解决方案在此! 导读 通过提供独立的执行环境而不需要整个虚拟机的开销,容器已经成为大规模部署应用程序的很有吸引力的选择. Docker让容器变得易于使 ...
- java ipv6校验_Java对IPv6的支持详解:支持情况、相关API、演示代码等
本文由朱益盛.杨晖.傅啸分享,来自IBM Developer社区,原题"使用 Java 开发兼容 IPv6 的网络应用程序",本次收录时有改动. 1.引言 前几天,有个群友跟我讨论 ...
- Mesalink v1.0.0 发布,正式支持 TLS 1.3 和 IPv6,支持CMake编译,支持Windows,实现生产环境可用...
百度智能云 云生态狂欢季 热门云产品1折起>>> MesaLink TLS是百度安全实验室研发的下一代传输层安全(Transport Layer Security, TLS)库. ...
- Docker容器已正式支持苹果M1Mac电脑
Docker今日发布了新版本Docker Desktop,正式支持了苹果M1芯片的Mac电脑. Docker官方表示,M1 Mac版本的Docker Desktop更加高效,运行起来更加安静,开发者能 ...
- Jira-使用docker安装jira(支持最新版本)
Jira-使用docker安装jira(支持最新版本) 最新版本已支持到9.5.0 本文仅提供交流学习 本文针对具有docker.Linux使用基础的兄弟姐妹们 请提前安装docker软件 需要原生安 ...
- ios服务器需要开启ipv6的支持,针对iOS审核要求为应用兼容IPv6
开发中使用IPv6的好处 1.IPv6:避免了网络地址转换(NAT) 2.通过网络通过使用简化的头提供了更快的路由 3.防止网络分段 4.避免广播邻居地址解析 不建议使用底层的网络API 下图展示的蓝 ...
最新文章
- 突发!Spring Cloud 爆高危漏洞。。赶紧修复!!
- 自定义HTTP标头:命名约定
- 不同年龄段给狗狗起名字,我命中了,你呢?
- (转)海量数据面试题集锦
- python属性访问权限_python 面向对象-访问权限修饰符
- php四种基础算法:冒泡,选择,插入和快速排序法
- 软件构造学习笔记-实验3
- oracle线程阻塞_Oracle Service Bus –线程阻塞案例研究
- 前端学习(1806):前端调试之列表伪类练习二
- winform + INotifyPropertyChanged + IDataErrorInfo + ErrorProvider实现自动验证功能
- JS日期比较 2013-01-31大于2013-02-01
- 论文绘图与合成图片过程中常见问题
- iOS学习之路-简单汤姆猫
- 详解在VMware Workstation Pro 15 安装 CentOS 7后配置网络
- 微型计算机基础答案,第1章 微型计算机基础知识 题库和答案
- 数据仓库工程师的职业规划
- C语言基础——预处理命令
- 华为2015年实习招聘机试
- EMC AUTOSTART双机热备
- 文旅夜游项目如何做好景区内容建设