为docker中断启用IPv6将主持IPv6连接,导致既不具有IPv6连接

前言:我在Docker和networking方面都是新手,尤其是IPv6。 是软件开发人员,而不是系统/networkingpipe理员。

我正在Linode上运行Arch,并且希望设置支持IPv6的Docker。 我可以用IPv4做,虽然我没有解决这个问题,但我仍然在使用IPv4,但是我非常期待启用IPv6。

因为我使用的是systemd-networkd IPForward=kernel ,所以我必须启用IPForward=kernel

如果Docker没有运行,那么IPv6显然适用于我的Arch。

如果我运行没有IPv6的Docker,Arch有IPv6连接。

现在,如果我运行启用了IPv6的Docker: docker daemon --ipv6 --fixed-cidr-v6="XXXXX/64" -H fd:// ,它打破了我的Arch的IPv6连接, 。

我发现的一个区别是没有Docker的IPv6,我在Arch上有一个默认的IPv6路由:

 [root@x ~]# ip -6 route show 2a01:7e00::/64 dev enp0s4 proto kernel metric 256 pref medium fe80::/64 dev enp0s4 proto kernel metric 256 pref medium fe80::/64 dev docker0 proto kernel metric 256 pref medium default via fe80::1 dev enp0s4 proto ra metric 1024 expires 73sec hoplimit 64 pref medium 

当启用IPv6时,我留下这个:

 [root@x ~]# ip -6 route show 2a01:7e00::/64 dev enp0s4 proto kernel metric 256 pref medium 2a01:7e00::/64 dev docker0 metric 1024 pref medium fe80::/64 dev enp0s4 proto kernel metric 256 pref medium fe80::/64 dev docker0 proto kernel metric 256 pref medium 

但是,手动添加默认的IPv6路由:

 ip -6 route add default via fe80::1 dev enp0s4 

为我的主机启用IPv6,但仍留下没有IPv6连接的容器。


信息和我所尝试的

  • 要testing连接,我正在使用ping6
  • 作为我的testing假人的容器是base/archlinux
  • 手动添加默认IPv6路由到主机后,重新启动docker – 没有成功。
  • 通过docker0默认的IPv6路由,使主机和容器都没有连通性。
  • 在任何情况下,我都无法通过容器中的IPv6地址来ping主机。
  • 我遵循了Docker的IPv6指南,并试图将我的docker守护进程的IPv6子网改为80,并没有帮助(尽pipe如此,由于我的专业知识 ,我可能做错了什么)。
  • 我也尝试设置(如指南中所述) sysctl net.ipv6.conf.eth0.accept_ra=2 ,虽然在容器上它出错: sysctl: setting key "net.ipv6.conf.eth0.accept_ra": Read-only file system 。 在主机上,没有任何变化。
  • 事实上,默认情况下主机没有IPv6路由,这让我觉得这是Docker方面的事情。

启用IPv6时从主机configurationIP:

 [root@apitecture ~]# ip addr show dev enp0s4; ip addr show dev docker0; ip -6 route show 3: enp0s4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether f2:3c:91:ae:1a:0a brd ff:ff:ff:ff:ff:ff inet xxx.xxx.xxx.xxx/24 brd xxx.xxx.xxx.255 scope global enp0s4 valid_lft forever preferred_lft forever inet6 2a01:7e00::xxxx:xxxx:xxxx:xxxx/64 scope global valid_lft 2590589sec preferred_lft 603389sec inet6 fe80::f03c:91ff:feae:1a0a/64 scope link valid_lft forever preferred_lft forever 13: docker0@NONE: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default link/ether 02:42:cd:3d:04:60 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:cdff:fe3d:460/64 scope link valid_lft forever preferred_lft forever inet6 fe80::1/64 scope link valid_lft forever preferred_lft forever 2a01:7e00::/64 dev enp0s4 proto kernel metric 256 pref medium 2a01:7e00::/64 dev docker0 metric 1024 pref medium fe80::/64 dev enp0s4 proto kernel metric 256 pref medium fe80::/64 dev docker0 proto kernel metric 256 pref medium 

启用IPv6时从容器configurationIP:

 [root@x ~]# docker run -it --rm base/archlinux bash -c "ip -6 addr show dev eth0; ip -6 route show" 24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 inet6 2a01:7e00::xxx:xxxx:2/64 scope global tentative valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:2/64 scope link tentative valid_lft forever preferred_lft forever 2a01:7e00::/64 dev eth0 proto kernel metric 256 fe80::/64 dev eth0 proto kernel metric 256 default via fe80::1 dev eth0 metric 1024 

xxxx是隐藏的,希望我不必公开我的公共地址。

我该如何解决这个问题,为Docker启用IPv6?