最后,我希望通过 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 堆栈:
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://stackoverflow.com/a/39818953/1735931)
docker network create --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 disable ipv4 尝试不起作用。
我目前没有安装 docker-compose,接下来可能会尝试,但是有没有办法在 Docker Swarm 模式下运行纯 IPv6 容器?
注意:我可以在没有 swarm/compose 的情况下手动运行和配置一些仅 IPv6 的容器:(如上创建网络,甚至只使用默认网桥)
$ 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"