前言:我是码头和网络方面的新手,尤其是IPv6。是一个软件开发人员,而不是系统/网络管理员。
我正在Linode上运行Arch,并希望设置带有IPv6支持的Docker。我可以使用IPv4,虽然我还没有解决这个问题,但我仍然使用IPv4,但我真的很期待启用IPv6。
由于我使用的是systemd-networkd,所以我必须启用IPForward=kernel,我已经这样做了。
如果Docker没有运行,显然,IPv6为我的Arch工作。
如果我运行的是没有IPv6的Docker,Arch有IPv6连接。
现在,如果我在启用IPv6:docker daemon --ipv6 --fixed-cidr-v6="XXXXX/64" -H fd://的情况下运行Docker,它会破坏我的Arch的IPv6连接,并且它在容器中也不工作。
我发现的一个不同之处是,如果没有IPv6 for Docker,那么我的拱门上就有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连接的容器。
ping6。base/archlinux。docker0路由会使主机和容器都没有连接性。sysctl net.ipv6.conf.eth0.accept_ra=2,但是,在容器上设置错误时使用:sysctl: setting key "net.ipv6.conf.eth0.accept_ra": Read-only file system。在主机上什么都没变。启用IPv6时来自主机的IP配置:
[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时,容器中的IP配置:
[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 1024xxxx是隐藏的,希望我不必公开我的公开地址。
发布于 2022-02-11 04:06:21
我也遇到过类似的问题。我的设置是在Debian中运行的对接映像,它再次运行在Proxmox上。
/etc/docker/daemon.json的官方编辑方式对我来说从来都不管用。更糟糕的是,不管是否编辑这个文件,坞桥都会破坏我的主机的ipv6连接。
对于我的例子,ip -6 route add default via xxxx dev eth0,然后在docker-compose.yml中添加network_mode: "host",为主机和容器启用ipv6访问。
但是,对于添加ipv6路由部分,fe80::1并不适用于我。当码头守护进程关闭时,我必须采取任何默认的ipv6路由。唯一的缺点是,每次LXC重新启动时,都必须执行该命令。
https://serverfault.com/questions/729488
复制相似问题