Как настроить IPv6 с помощью docker-compose

Я использую Ubuntu 18.04 в DigitalOcean, с включенным IPv6:

PUBLIC IPV6 ADDRESS:
xxxx:xxxx:2:d0::216f:3001
PUBLIC IPV6 GATEWAY:
xxxx:xxxx:2:d0::1
CONFIGURABLE ADDRESS RANGE:
xxxx:xxxx:2:d0::216f:3000 - xxxx:xxxx:2:d0::216f:300f

Согласно этой странице: https://docs.docker.com /v17.09/engine/userguide/networking/default_network/ipv6/#docker-ipv6-cluster

Правильно ли размещать 16 IPv6-адресов вот так?

{
  "ipv6": true,
  "fixed-cidr-v6": "xxxx:xxxx:2:d0::216f:3000/124"
}

Или их можно использовать (как если что-то вроде 192.168.0.x)?

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8::c008/125"
}

В любом случае я пробовал первый.

docker run -d --name ipv6test alpine ash -c "ping6 2606:4700:4700::1111"

Я «проверяю» IPv6-адрес. Я делаю запись NDP:

ip -6 neigh add proxy xxxx:xxxx:2:d0::216f:3004 dev eth0

В этом случае контейнер может связываться с внешним миром.

Тестирование завершено. Я хочу применить IPv6 в своем проекте. Все начинается с docker-compose.

Согласно этой странице: https://docs.docker.com/compose/compose-file/#ipv4_address-ipv6_address

version: "3.7"

services:
  app:
    image: nginx:alpine
    networks:
      app_net:
        ipv6_address: xxxx:xxxx:2:d0::216f:3010

networks:
  app_net:
    ipam:
      driver: default
      config:
        - subnet: "xxxx:xxxx:2:d0::216f:3000/124"

Внутри контейнера невозможно установить соединение:

# ping6 2606:4700:4700::1111
PING 2606:4700:4700::1111 (2606:4700:4700::1111): 56 data bytes
ping6: sendto: Address not available

Я пропустил что-нибудь?

Спасибо.

1
задан 25 April 2019 в 11:54
3 ответа

Может быть немного поздно, но это настройка, которая работала для меня в DigitalOcean:

  1. Создайте /etc/docker/daemon.json:
{
    "ipv6": true,
    "fixed-cidr-v6": "<Your IPv6 address range start in DO console>/124"
}
  1. sudo systemctl reboot docker

  2. Добавьте в свой docker-compose.yml ]:

    sysctls:
      - "net.ipv6.conf.all.disable_ipv6=0"

Кажется, по умолчанию IPv6 отключен, и нам нужно включить его в sysctl.

РЕДАКТИРОВАТЬ: на самом деле это позволяет док-контейнеру получить IPv6-адрес и выполнять разрешение имен IPv6, но почему-то он не может отправлять данные (сеть недоступна).

Хотя Docker-контейнеры запускаются с помощью docker, который работает в сети bridge по умолчанию и имеет доступ к внешним хостам IPv6, Docker-контейнеры запускаются с помощью docker-compose работает в своей выделенной сети, поэтому, возможно, потребуется дополнительная работа по маршрутизации. Мой вариант использования был на самом деле ограничен (socat в качестве прокси-сервера с IPv4 на IPv6), поэтому я просто прибегал к прямому использованию хост-сети с помощью:

    network_mode: host
3
ответ дан 3 January 2021 в 18:21

ipv6_address: xxxx:xxxx:2:d0::216f:3010 не похоже на то же самое подсеть: xxxx:xxxx:2:d0::216f:3000/124

Попробуйте что-нибудь вроде xxxx:xxxx:2:d0::216f:300[0-f].

1
ответ дан 26 January 2021 в 17:16

Моя личная настройка, работает. Он использует внутренний мост докера по умолчанию вместо предоставленной пользователями сети.

  1. /etc/docker/daemon.json
{
    "ipv6": true,
    "fixed-cidr-v6": "2a02:168:7a0e:11::/64"
}
  1. docker-compose.yml
version: '3.3'

services:
  shell:
    networks:
      - bridge
    image: centos:8

networks:
  bridge:
    external: true
  1. Тестирование
docker-compose run --rm shell
  1. В контейнере
[root@dfeb2fe7917d /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
218917: eth0@if218918: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2a02:168:7a0e:11:0:242:ac11:2/64 scope global nodad 
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link 
       valid_lft forever preferred_lft forever
[root@dfeb2fe7917d /]# ping6 -c 3 google.ch
PING google.ch(zrh04s15-in-x03.1e100.net (2a00:1450:400a:803::2003)) 56 data bytes
64 bytes from zrh04s15-in-x03.1e100.net (2a00:1450:400a:803::2003): icmp_seq=1 ttl=114 time=0.774 ms
64 bytes from zrh04s15-in-x03.1e100.net (2a00:1450:400a:803::2003): icmp_seq=2 ttl=114 time=1.12 ms
64 bytes from zrh04s15-in-x03.1e100.net (2a00:1450:400a:803::2003): icmp_seq=3 ttl=114 time=1.13 ms

--- google.ch ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 0.774/1.008/1.128/0.165 ms
2
ответ дан 26 February 2021 в 10:49

Теги

Похожие вопросы