ipv6 nat也是不得已而为之, 毕竟设备又不总是有固定的v6地址. 之前一段时间不需要用robbertkl/ipv6nat这个容器, 只需要改/etc/docker/daemon.json就行, 但是重启之后不知道为什么不行了, 所以还是用上吧
- 首先是/etc/docker/daemon.json
| { |
| "default-runtime": "nvidia", |
| "runtimes": { |
| "nvidia": { |
| "path": "nvidia-container-runtime", |
| "runtimeArgs": [] |
| } |
| }, |
| "ipv6": true, |
| "fixed-cidr-v6": "fd00:aaaa:0000:0000::/64", |
| "default-address-pools": [ |
| {"base": "172.17.0.0/16", "size": 24}, |
| {"base": "fd00:aaaa:0000:1::/64", "size": 80} |
| ] |
| } |
上面的nvidia-container-runtime部分可以忽略. 为什么这里的address-pools的size要设成/80而不是/64或者更大, 详见 https://github.com/moby/moby/issues/42801 , 是docker的bug, 否则会只能创建一个含ipv6的网络, 特别怪.
- 然后用 https://github.com/robbertkl/docker-ipv6nat 该仓库处理ipv6nat, 之前有一段时间我只进行第一步和第三步就能ping通v6地址, 这一步或许有些人不需要?
可以用这个docker-compose.yml:
| version: '3' |
| services: |
| run: |
| restart: always |
| container_name: ipv6nat |
| privileged: true |
| network_mode: host |
| volumes: |
| - /var/run/docker.sock:/var/run/docker.sock:ro |
| - /lib/modules:/lib/modules:ro |
| image: robbertkl/ipv6nat |
- 要加入到ipv6网络的容器配置
| version: "3" |
| |
| services: |
| c1: |
| image: xxx |
| container_name: c1 |
| networks: |
| - n1 |
| c2: |
| image: xxx |
| container_name: c2 |
| networks: |
| - n1 |
| networks: |
| n1: |
| name: n1 |
| driver: bridge |
| enable_ipv6: true |