启用Docker对ipv6的支持

这篇具有很好参考价值的文章主要介绍了启用Docker对ipv6的支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我的环境:

  • OS: CentOS 7.9
  • Docker:20.10.7

1. 启用Docker守护进程对ipv6的支持

要想在Docker容器或者Swarm服务中使用ipv6,首先需要在Docker守护进程中启用对ipv6的支持,具体做法如下:

  1. 编辑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。

  2. 重载配置文件

     sudo systemctl reload docker && sudo systemctl restart docker
    

    现在你可以使用docker network create --ipv6 ... 创建一个支持ipv6的网络了。另外你也可以在启动容器时使用--ip6参数来使容器支持ipv6。

  3. 审查默认bridge网络

     sudo docker network inspect bridge
    

    启用Docker对ipv6的支持
    可以看到已经配置成功!

接下来就可以在容器中使用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 1500
        inet 10.156.10.2  netmask 255.255.255.0  broadcast 10.156.10.255
        inet6 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 0
        TX 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 1500
        inet 192.168.30.72  netmask 255.255.0.0  broadcast 192.168.255.255
        inet6 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 0
        TX 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 1500
        inet 192.168.30.72  netmask 255.255.0.0  broadcast 192.168.255.255
        inet6 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 0
        TX 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: true
    driver: bridge
    driver_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。

编排文件:文章来源地址https://www.toymoban.com/news/detail-430708.html

version: '3'
services:
  app:
    image: app:7.16.1
    container_name: app
    restart: always
    privileged: true
    networks:
      - extnetwork 
  #省略其他服务。。。

networks:
  extnetwork:
    external: true

到了这里,关于启用Docker对ipv6的支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 13 动态启用或禁用IPV6

    客户想要通过APK来控制IPV6的启用和禁用,这里我们通过广播的方式来让客户控制IPV6。 adb shell ifconfig 这里我们用debug软件,将下面节点置为1 如图ipv6已被禁用了  echo 1  /proc/sys/net/ipv6/conf/all/disable_ipv6 接下来我们通过代码控制,动态注册广播 custom.action.intent.ipv6.on   //禁用i

    2024年01月20日
    浏览(30)
  • 怎么通过ssh连上ipv6的服务器?阿里云怎么配置ipv6?wsl2怎么支持ipv6?

    最近在研究ipv6,光调通环境居然让我折腾了好多回,现在终于通了 在这里提一句,IPV6和IPV4是两种东西,不要想着ipv6兼容ipv4,你就当它是全新的东西 测试通过就代表你电脑可以访问ipv6 http://www.test-ipv6.com/ 如果不行,你需要先看光猫有没有开ipv6,比如我就是拿到公司光猫的

    2024年02月05日
    浏览(47)
  • Ubuntu20.04开启/禁用ipv6

    IP 是互联网的核心协议。现在使用的 IP(即 IPv4)是在 20 世纪 70 年代末期设计的。互联网经过几十年的飞速发展,到 2011 年 2 月, IPv4 的地址已经耗尽, ISP 已经不能再申请到新的 IP 地址块了。我国在 2014 年至 2015 年也逐步停止了向新用户和应用分配 IPv4 地址,同时全面开始

    2024年04月10日
    浏览(35)
  • 何判断自己网络是否支持IPV6

    Win10专业版 IPV6 何判断自己网络是否支持IPV6 要判断您的网络是否支持 IPv6,可以采取以下方法: 检查您的网络设备(如路由器、交换机等)是否支持 IPv6。通常,支持 IPv6 的设备会标明 “IPv6 Ready” 或 “IPv6 Enabled”。 如果您使用的是 Windows 操作系统,可以打开命令提示符(

    2024年02月05日
    浏览(26)
  • 中兴R5300 G4服务器iSAC管理员zteroot密码遗失的重置方法及IPV6地址启用设置

    本文讲解中兴R5300 G4服务器BMC带外iSAC管理员zteroot密码遗失,无法登录时如何对其进行密码重置,以及iSAC启用IPV6地址的方法。 一、重置中兴R5300 G4服务器iSAC管理员zteroot密码 1、通过SSH登录到iSAC,默认用户名:sysadmin,密码:superuser,如有修改,请输入修改后的密码 2、确认主

    2024年02月03日
    浏览(53)
  • centos配置网卡自动获取ipv4和ipv6地址

    环境: os:centos7 正常网卡通过dhcp是不会自动获取ipv6地址的,一般手动执行 dhclient -6 网卡名 可以获取。 现在需求是:实现os启动后自动获取到ipv6地址 在网卡对应的配置文件 /etc/sysconfig/network-scripts/ifcfg-网卡名 中添加(修改)如下字段,然后重启 本次实践采用的是kvm虚机,

    2024年02月16日
    浏览(32)
  • 支持ipv6转发的路由器有哪些

    目前有很多支持IPv6转发的路由器可供选择,这里列举一些常见的品牌和型号: TP-Link: Archer C7 AC1750,Archer C9 AC1900,Archer C1200,Archer C60,Archer C50,Archer A9,Archer C2300,Archer C4000,Archer C5400 ASUS: RT-AC68U,RT-AC88U,RT-AC3100,RT-AC5300,RT-AC86U,RT-AC2900,RT-AC1900P,RT-AC66U,RT-N66U D-

    2024年02月12日
    浏览(30)
  • iPXE 学习 部署Linux/Windows系统 支持IPv4/IPv6

    折腾了一周的iPXE,大概弄明白了,ipxe原理 文件的具体作用就不讲了 自己也半懂不懂 不过有一说一 这可能是全网最完全的iPXE环境部署了 记录自己操作的每一个步骤 ┭┮﹏┭┮ 为了支持legacy BIOS 以及 UEFI 还要同时支持IPv4/IPv6 我先说一下  我的机器是多网卡  配置ipxe的端口

    2024年04月14日
    浏览(53)
  • Python项目Flask ipv6双栈支持改造

       Flask 是一个微型的(轻量)使用Python 语言开发的 WSGI Web 框架(一组库和模块),基于Werkzeug WSGI工具箱/库和Jinja2 模板引擎,当然,Python的WEB框架还有:Django、Tornado、Webpy,这暂且不提。 Flask使用BSD授权。 Flask也被称为 microframework(微框架) ,Flask 的目标是保持核心简单

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包