У меня есть сервер 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