最终,我希望通过compose或swarm模式部署一个纯IPv6网络。目前,我只想部署一个仅支持IPv6的单一容器,不关心路由(只需容器之间的连接)。
我的设置:
- 操作系统: Centos 7 - dockerd --ipv6 --fixed-cidr-v6=2001:db8:1::/64 --iptables=true --ip-masq=true --mtu=1600 --experimental=true - docker-engine-17.05.0.ce-1.el7.centos.x86_64.rpm - 主机具有IPv4和IPv6地址。对于两者都开启了转发(这对我并不重要)。
我尝试了似乎每种组合(下面是其中几个示例):
自包含的Docker堆栈,包括容器和网络:
结果:容器中同时存在IPv4和IPv6地址,但cap_add被忽略(在Swarm模式下不支持),因此上面的ifconfig禁用ipv4尝试无法生效。
我目前没有安装docker-compose,下一步可能会尝试,但是在Docker Swarm模式下是否有运行纯IPv6容器的方法?
注意:我可以手动运行和配置一些仅支持IPv6的容器,而不需要Swarm/compose: (如上所述创建网络,甚至只使用默认桥接)
我的设置:
- 操作系统: Centos 7 - dockerd --ipv6 --fixed-cidr-v6=2001:db8:1::/64 --iptables=true --ip-masq=true --mtu=1600 --experimental=true - docker-engine-17.05.0.ce-1.el7.centos.x86_64.rpm - 主机具有IPv4和IPv6地址。对于两者都开启了转发(这对我并不重要)。
我尝试了似乎每种组合(下面是其中几个示例):
自包含的Docker堆栈,包括容器和网络:
version: '3'
networks:
app_net:
driver: overlay
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
driver: default
config:
-
subnet: 172.16.238.0/24
-
subnet: 2001:3984:3989::/64
services:
app:
image: alpine
command: sleep 600
networks:
app_net:
ipv4_address: 0.0.0.0
ipv6_address: 2001:3984:3989::10
结果: 容器中只有IPv4地址,0.0.0.0将被忽略。
外部预创建的网络 (根据https://dev59.com/JZvga4cB1Zd3GeqPvQKM#39818953)
使用以下命令创建docker网络:--driver overlay --ipv6 --subnet=2001:3984:3989::/64 --attachable ext_net
version: '3'
networks:
ext_net:
external:
name: ext_net
services:
app:
image: alpine
command: ifconfig eth0 0.0.0.0 ; sleep 600
cap_add:
- NET_ADMIN
networks:
ext_net:
ipv4_address: 0.0.0.0
ipv6_address: 2001:3984:3989::10
结果:容器中同时存在IPv4和IPv6地址,但cap_add被忽略(在Swarm模式下不支持),因此上面的ifconfig禁用ipv4尝试无法生效。
我目前没有安装docker-compose,下一步可能会尝试,但是在Docker Swarm模式下是否有运行纯IPv6容器的方法?
注意:我可以手动运行和配置一些仅支持IPv6的容器,而不需要Swarm/compose: (如上所述创建网络,甚至只使用默认桥接)
$ docker run --cap-add=NET_ADMIN --rm -it alpine
$$ ifconfig eth0 0.0.0.0
$$ ping6 other-container-ipv6-address # WORKS!
或者简写:
$ docker run --cap-add=NET_ADMIN --rm -it alpine sh -c "/sbin/ifconfig eth0 0.0.0.0 ; sh"