docker compose ipv6的处理 容器互联的方法
简介:
docker compose 是我常用的容器编排工具,至今没有升级到K8S,汗
那么compose的yaml配置的容器如何互联呢?
常见的恐怕就是上次折腾nginx的那一次了。
一个nginx,反向代理apache,tomcat,iis……
当然也有一个数据库,同时为多个应用服务。
经多次实验,现整理完整无错的方法来处理docker compose ipv6的容器互联。
关键点:使用自定义网络,开启ip6tables
一:docker daemon.json
docker的配置
打开扩展选项,打开ip6tables,这样就不用自己去写那个nat转发了。
{ "experimental": true, "ip6tables": true }
二:创建自定义网络
我写成脚本了
#!/bin/sh docker network create --ipv6 \ --subnet="fc00:0:0:1::/64" \ mynet
IPv6 的私有 IP 定义在 RFC 4193,地址块 fc00 :: /7 已保留。
http://www.ab126.com/goju/7983.html 这里我计算了几个。
免得冲突。几个不同的服务器,使用不同的私有地址吧。
你真使用一样的也没关系。
三:yaml加入默认网络
version: "3" #版本3 services: #服务 nginx: #服务名 image: nginx:stable-alpine #镜像名称 privileged: true #高级权限 tty: true #开一个终端 container_name: nginx #自定义容器名 restart: always ports: #开放端口映射 - 80:80 #冒号左边是宿主机开放端口,冒号右边是容器开放端口 networks: default: external: true name: mynet
红字是加入已存在的默认网络。
四:测试网络互联
test.yaml
version: "3.9" services: busybox: image: busybox command: ping6 -c 4 nginx networks: default: external: true name: mynet
docker compose -f test.yaml up
[root@test build]# docker compose -f test.yaml up [+] Running 2/2 ⠿ busybox Pulled 8.7s ⠿ 50783e0dfb64 Pull complete 2.7s [+] Running 1/1 ⠿ Container build-busybox-1 Created 0.4s Attaching to build-busybox-1 build-busybox-1 | PING nginx (fc00:0:0:1::2): 56 data bytes build-busybox-1 | 64 bytes from fc00:0:0:1::2: seq=0 ttl=64 time=0.570 ms build-busybox-1 | 64 bytes from fc00:0:0:1::2: seq=1 ttl=64 time=0.159 ms build-busybox-1 | 64 bytes from fc00:0:0:1::2: seq=2 ttl=64 time=0.103 ms build-busybox-1 | 64 bytes from fc00:0:0:1::2: seq=3 ttl=64 time=0.156 ms build-busybox-1 | build-busybox-1 | --- nginx ping statistics --- build-busybox-1 | 4 packets transmitted, 4 packets received, 0% packet loss build-busybox-1 | round-trip min/avg/max = 0.103/0.247/0.570 ms build-busybox-1 exited with code 0
容器互联成功
nginx解析为fc00:0:0:1::/64
五:测试访问者IP
[root@test build]# docker logs -f apache AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message [Wed Aug 24 10:19:27.854991 2022] [mpm_event:notice] [pid 1:tid 139815773776712] AH00489: Apache/2.4.54 (Unix) configured -- resuming normal operations [Wed Aug 24 10:19:27.855106 2022] [core:notice] [pid 1:tid 139815773776712] AH00094: Command line: 'httpd -D FOREGROUND' 2408:****:****:****:****:**** - - [24/Aug/2022:10:20:20 +0000] "GET / HTTP/1.1" 304 - 2408:****:****:****:****:**** - - [24/Aug/2022:10:20:21 +0000] "GET / HTTP/1.1" 304 - 2408:****:****:****:****:**** - - [24/Aug/2022:10:20:21 +0000] "GET / HTTP/1.1" 304 - 2408:****:****:****:****:**** - - [24/Aug/2022:10:20:22 +0000] "GET / HTTP/1.1" 304 - 2408:****:****:****:****:**** - - [24/Aug/2022:10:20:22 +0000] "GET / HTTP/1.1" 304 - 240e:****:****:****:****:**** - - [24/Aug/2022:10:20:30 +0000] "GET / HTTP/1.1" 304 - 240e:****:****:****:****:**** - - [24/Aug/2022:10:21:20 +0000] "-" 408 -
apache,已经可以正确获取访问者IP了。