Dockernetworking暴露IPv6

我正在运行一个小型的arm板,在家里的本地networking中提供一些服务。 当我尝试了解docker的ipv6支持时,我对第一次testing的结果感到困惑。

我的networking由使用dhcpv6的单一路由控制,每个客户端有2个有效的全球ipv6地址(也是1个本地ipv4),并受路由器的防火墙保护(不允许来自互联网的请求到客户端)。

arm板运行的是ubuntu 16.04,有一个有效的ipv6地址,启用了隐私扩展function。

所有docker集装箱正在使用默认的桥梁networking,没有任何调整。

在docker上的主机

netstat -tulpen|grep docker 

节目

 tcp6 0 0 :::8080 :::* LISTEN 0 22490 1559/docker-proxy 

没有一个单一的ipv4服务监听。

在这个docker容器内部,同样的netstat请求给出

 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 23955 8/nginx tcp6 0 0 :::80 :::* LISTEN 0 23956 8/nginx 

Nginx正在监听ipv6以及ipv4 – 端口80被暴露在8080端口

 docker run (...) -p 8080:80 (...) 

检查桥梁networking

 docker network inspect bridge 

显示默认的本地网桥

 (...) "Scope": "local", "Driver": "bridge", "EnableIPv6": false, (...) "b10cf3750252daf0ba11a59cfcd64c72194adcaacd4b9b5df17fae0f53fc4f00": { "Name": "ng", "EndpointID": "f42de3590072dec2b0d3fae61fc89aeffcb8e6e716b27f5736272fcc8f94f643", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } (...) 

现在我的问题:

据我了解configuration泊坞桥ipv6被禁用,docker容器没有一个ipv6 – ipv4只。 Nginx监听ipv4以及ipv6 – 忽略了没有ipv6可用的事实。

为什么端口8080上暴露的主机上的nginx服务只能通过ipv6列出?

使用另一个networking客户端validation此

 curl -g -6 http://[DOCKER_HOST_IPV6]:8080 curl http://[DOCKER_HOST_IPV4]:8080 

显示服务可用ipv6以及ipv4 – 为什么netstat不显示该服务作为ipv4服务?

如果在网桥configuration中禁用了ipv6,那么该服务如何可达?

我有另一个容器在udp 1194上运行openvpn。我configuration服务器使用udp6,用容器内的netstatvalidation。 这个容器使用-p标志以相同的方式公开,但在主机上根本不可用。 如何正确桥接此服务?