如何使用Docker Swarm模式或Docker Compose部署IPv6容器
最后,我希望通过compose或swarm模式部署一个纯IPv6网络。目前,我只希望使用IPv6部署一个容器(仅限)。我目前对路由(只是容器到容器的连接)不感兴趣 我的设置:如何使用Docker Swarm模式或Docker Compose部署IPv6容器,docker,docker-compose,ipv6,docker-swarm-mode,Docker,Docker Compose,Ipv6,Docker Swarm Mode,最后,我希望通过compose或swarm模式部署一个纯IPv6网络。目前,我只希望使用IPv6部署一个容器(仅限)。我目前对路由(只是容器到容器的连接)不感兴趣 我的设置: 操作系统:Centos 7 dockerd--ipv6--fixed-cidr-v6=2001:db8:1::/64--iptables=true--ipmasq=true--mtu=1600--experimental=true docker-engine-17.05.0.ce-1.el7.centos.x86_64.
- 操作系统:Centos 7
- dockerd--ipv6--fixed-cidr-v6=2001:db8:1::/64--iptables=true--ipmasq=true--mtu=1600--experimental=true
- docker-engine-17.05.0.ce-1.el7.centos.x86_64.rpm
- 主机具有IPv4和IPv6地址。转发对双方都是开启的(这对我来说并不重要)
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
外部预先创建的网络 (根据) docker网络创建--驱动程序覆盖--ipv6 --子网=2001:3984:3989::/64--可连接的外部网络 结果:容器中的IPv4和IPv6地址都被忽略(在Swarm模式下不受支持),因此上面的ifconfig disable IPv4尝试不起作用 我目前没有安装docker compose,下一步可能会尝试,但是有没有办法在docker Swarm模式下运行纯IPv6容器? 注意:我能够在不使用swarm/compose的情况下手动运行和配置一些仅限IPv6的容器: (如上所述创建网络,甚至只使用默认网桥) 或速记:
$ docker run --cap-add=NET_ADMIN --rm -it alpine sh -c "/sbin/ifconfig eth0 0.0.0.0 ; sh"
我能用《docker compose》(docker compose)通过严重的丑陋来破解它。如果你绝望了,就在这里。(由于权限提升,此方法无法在Swarm模式下工作) 计划
# Note: enable_ipv6 does not work in version 3!
version: '2.1'
networks:
app_net:
enable_ipv6: true
driver: overlay
ipam:
driver: default
config:
-
subnet: 172.16.238.0/24
-
subnet: 2001:3984:3989::/64
services:
app1:
build: ./server
hostname: server1
command: blablabla # example of arg passing to ipv6.sh
cap_add:
- NET_ADMIN
volumes:
- ipv6stuff:/ipv6stuff
networks:
- app_net
app2:
build: ./server
hostname: server2
command: SOMETHING # example of arg passing to ipv6.sh
cap_add:
- NET_ADMIN
volumes:
- ipv6stuff:/ipv6stuff
networks:
- app_net
volumes:
ipv6stuff:
服务器/Dockerfile
FROM alpine:latest
ADD files /
RUN apk --update add bash #simpler scripts
# Has to be an array for parameters to work via command: x in compose file, if needed
ENTRYPOINT ["/ipv6.sh"]
server/files/ipv6.sh
#/bin/bash
#基于此处参数的可选条件逻辑。。。
#(例如,在某些容器中有条件地保留ipv4地址)
#
#删除ipv4
ifconfig eth0.0.0.0
IP6=$(ip地址显示eth0 | grep inet6 | grep global | awk'{print$2}'| cut-d/-f 1)
echo“主机$HOSTNAME具有ipv6 ip$IP6”
#将条目存储在共享卷中
echo“$IP6$HOSTNAME”>/ipv6stuff/hosts.$HOSTNAME
#从/etc/hosts中删除现有的ipv4线路只是为了彻底解决这个问题
#Docker不允许删除此文件,因此简单的sed-i不起作用。
cp/etc/hosts/tmp/1;sed-i“s/^.*\s$HOSTNAME/”/tmp/1;cat/tmp/1>/etc/hosts
#等待所有容器启动
睡眠2
#将每个人的条目放入我们的主机文件中。
cat/ipv6stuff/hosts.*>>/etc/hosts
回显“我的主机文件:”
cat/etc/hosts
#测试连接性(硬编码)
ping6-c3服务器1
ping6-c3服务器2
# Note: enable_ipv6 does not work in version 3!
version: '2.1'
networks:
app_net:
enable_ipv6: true
driver: overlay
ipam:
driver: default
config:
-
subnet: 172.16.238.0/24
-
subnet: 2001:3984:3989::/64
services:
app1:
build: ./server
hostname: server1
command: blablabla # example of arg passing to ipv6.sh
cap_add:
- NET_ADMIN
volumes:
- ipv6stuff:/ipv6stuff
networks:
- app_net
app2:
build: ./server
hostname: server2
command: SOMETHING # example of arg passing to ipv6.sh
cap_add:
- NET_ADMIN
volumes:
- ipv6stuff:/ipv6stuff
networks:
- app_net
volumes:
ipv6stuff:
FROM alpine:latest
ADD files /
RUN apk --update add bash #simpler scripts
# Has to be an array for parameters to work via command: x in compose file, if needed
ENTRYPOINT ["/ipv6.sh"]