我正在运行一个小型的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标志以相同的方式公开,但在主机上根本不可用。 如何正确桥接此服务?