1

У меня есть сервер Ubuntu 16.04 LTS, работающий как по IPv4, так и по IPv6 (двойной стек). На этом сервере также работает Docker. Однако у меня возникают проблемы, когда я пытаюсь получить доступ к контейнерам в рое, но только через IPv6. Вот мои шаги:

Я создал простое приложение с веб-сервером gnuicron:

def app(environ, start_response):
    """Simplest possible application object"""
    data = b'Hello, World!\n'
    status = '200 OK'
    response_headers = [
        ('Content-type', 'text/plain'),
        ('Content-Length', str(len(data)))
    ]
    start_response(status, response_headers)
return iter([data])

Я запускаю это с gunicorn -w 4 -b [::]:5678 myapp:app на моем сервере и проверяю, работает ли оно, запустив это на клиенте с двумя стеками в моей сети:

$ curl --connect-timeout 15 http://[2001:db8:db0::5]:5678
Hello, World!
$ curl --connect-timeout 15 http://192.168.10.5:5678
Hello, World!

Я пишу Dockerfile и запускаю его:

docker build -t docker_ipv6_test .
docker run --rm --init -p 5678:5678 docker_ipv6_test

Я запускаю ту же проверку, что и примерно, и она работает, как ожидалось. Затем я пишу docker-compose.yml:

version: '3'
services:
  ipv6_test:
    image: docker_ipv6_test:latest
    deploy:
      replicas: 1
      restart_policy: 
        condition: on-failure
      ports:
        - '5678:5678/tcp'

и запустить его:

docker stack deploy -c docker-compose.yml ipv6_test

Тогда это происходит:

$ curl --connect-timeout 15 http://[2001:db8:db0::5]:5678
curl: (28) Operation timed out after 0 milliseconds with 0 out of 0 bytes received
$ curl --connect-timeout 15 http://192.168.10.5:5678
Hello, World!

Но мне было интересно, если я делаю что-то не так, или я ошибся?

Весь мой код и файлы доступны здесь: https://github.com/SitronNO/docker_ipv6_test

0