I have an Ubuntu server 16.04 LTS running both IPv4 and IPv6 (dual-stack). This server is also running Docker. However, I have problems whenever I try to access the containers in the swarm, but only over IPv6. Here is my steps:
I have created an simple app running a gnuicron webserver:
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])
I run this with
gunicorn -w 4 -b [::]:5678 myapp:app on my server, and verify it works by running this on a dual-stack client in my network:
$ curl --connect-timeout 15 http://[2001:db8:db0::5]:5678 Hello, World! $ curl --connect-timeout 15 http://192.168.10.5:5678 Hello, World!
I write a Dockerfile and run it:
docker build -t docker_ipv6_test . docker run --rm --init -p 5678:5678 docker_ipv6_test
I run the same verification as about, and it works as expected. Then I write a 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'
and run it:
docker stack deploy -c docker-compose.yml ipv6_test
Then this happens:
$ 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!
But I was wondering if I am doing something wrong, or I have hit a bug?
All of my code and files are available here: https://github.com/SitronNO/docker_ipv6_test