Docker ping ipv6 端点

问题描述

我有一个 docker heartbeat 容器启动并运行,从那里应该连接到 ipv6 端点。

在心跳容器中 ping6 命令没有成功,在它正在工作的主机上。

在容器中

sh-4.2$ ping6 ipv6.google.com
PING ipv6.google.com(ams15s32-in-x0e.1e100.net (2a00:1450:400e:809::200e)) 56 data bytes
^C

在虚拟机上

[root@myserver myuser]# ping6 ipv6.google.com
PING ipv6.google.com(ams15s30-in-x0e.1e100.net (2a00:1450:400e:807::200e)) 56 data bytes
64 bytes from ams15s30-in-x0e.1e100.net (2a00:1450:400e:807::200e): icmp_seq=1 ttl=120 time=6.55 ms
64 bytes from ams15s30-in-x0e.1e100.net (2a00:1450:400e:807::200e): icmp_seq=2 ttl=120 time=6.60 ms

我已经用子网配置了 daemon.json 文件,docker-compose 文件负责准备 ipv6 网络

version: "2.2"
services:
  heartbeat:
    image: docker.elastic.co/beats/heartbeat:7.10.1
    container_name: "heartbeat"
    volumes:
      - "./elastic/heartbeat.yml:/usr/share/heartbeat/heartbeat.yml:ro"
      - "./elastic/monitor.d/:/usr/share/heartbeat/monitor.d/:ro"
    networks:
      - beats
networks:
  beats:
    enable_ipv6: true
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 2a02:1800:1e0:408f::806:0/112
        - gateway: 2a02:1800:1e0:408f::806:1

docker network ls 显示网络正确设置

docker network ls
NETWORK ID     NAME                  DRIVER    ScopE
...
328408216a9f   deployments_beats     bridge    local
...

桥接网络出现在 ifconfig 概览中,信息如下

br-328408216a9f: flags=4163<UP,broADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.19.0.1  netmask 255.255.0.0  broadcast 172.19.255.255
        inet6 2a02:1800:1e0:408f::806:1  prefixlen 112  scopeid 0x0<global>
        inet6 fe80::1  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::42:52ff:fe98:e176  prefixlen 64  scopeid 0x20<link>
        ether 02:42:52:98:e1:76  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 746 (746.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我在设置过程中遗漏了什么吗?

解决方法

您还需要在 docker 引擎上启用 ipv6:

  1. 编辑 /etc/docker/daemon.json,将 ipv6 键设置为 true,将 fixed-cidr-v6 键设置为您的 IPv6 子网。在这个例子中,我们设置 到 2001:db8:1::/64。

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

    保存文件。

  2. 重新加载 Docker 配置文件。

     $ systemctl reload docker
    

https://docs.docker.com/config/daemon/ipv6/

,

使用https://github.com/robbertkl/docker-ipv6nat解决

将容器添加到我的 docker 设置中

我在 /etc/docker/ 中的 daemon.json 文件

 executorService.execute(new DisplayEvents(calendarView,events,listAlarms));

将使用唯一的本地子网

在我的 docker-compose 中,我创建了一个 ipv6 网络

{
  "ipv6": true,"fixed-cidr-v6": "fd00::/64"
}

注意我在范围内使用的前缀 1

将您的容器添加到网络,它就可以工作了

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...