chr*_*lrt 3 ipv6 port-forwarding netstat docker docker-machine
我正在运行一个小臂板,在我们的本地网络内提供一些服务。当我尝试了解 docker 对 ipv6 的支持时,我对第一次测试的结果感到非常困惑。
我的网络由使用 dhcpv6 的单个路由控制,每个客户端都有 2 个有效的全局 ipv6 地址(还有 1 个本地 ipv4),并受到路由器防火墙的保护(不允许从互联网到客户端的请求)。
Arm 板运行的是 ubuntu 16.04,具有有效的 ipv6 地址并启用了隐私扩展。
所有docker容器都使用默认的桥接网络,没有任何调整。
在docker主机上
netstat -tulpen|grep docker
Run Code Online (Sandbox Code Playgroud)
节目
tcp6 0 0 :::8080 :::* LISTEN 0 22490 1559/docker-proxy
Run Code Online (Sandbox Code Playgroud)
没有一个 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
Run Code Online (Sandbox Code Playgroud)
Nginx 正在侦听 ipv6 和 ipv4 - 端口 80 暴露给端口 8080
docker run (...) -p 8080:80 (...)
Run Code Online (Sandbox Code Playgroud)
检查桥接网络
docker network inspect bridge
Run Code Online (Sandbox Code Playgroud)
显示默认本地网桥
(...)
"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": ""
}
(...)
Run Code Online (Sandbox Code Playgroud)
现在回答我的问题:
据我了解,docker 桥接 ipv6 被禁用的配置,docker 容器不只有 ipv6 - ipv4。Nginx 监听 ipv4 和 ipv6 - 忽略没有可用 ipv6 的事实。
为什么在端口 8080 上公开的主机上的 nginx 服务仅被列为通过 ipv6 可用?
使用另一个网络客户端验证这一点
curl -g -6 http://[DOCKER_HOST_IPV6]:8080
curl http://[DOCKER_HOST_IPV4]:8080
Run Code Online (Sandbox Code Playgroud)
显示该服务可用于 ipv6 和 ipv4 - 为什么 netstat 不将该服务显示为 ipv4 服务?
如果在桥接网络配置中禁用了 ipv6,那么如何才能访问服务?
我有另一个在 udp 1194 上运行 openvpn 的容器。我将服务器配置为使用 udp6,并使用容器内的 netstat 进行验证。该容器使用 -p 标志以相同的方式公开,但在主机上根本不可用。如何正确桥接此服务?
小智 5
这不是侦听 ipv6 的 nginx 容器(顺便说一句,您在容器中看到的 tcp6 套接字绑定在其 fe80:: 和 ::1 上,并且无法从容器世界外部访问)。这是管理主机端口的 docker-proxy 进程。当您使用“-p 8080:80”时,docker-proxy 会在主机 ::0 上绑定一个 tcp6 套接字,监听端口 8080(并且 tcp6 套接字也接受 tcp4)。
因此,docker 上禁用的 ipv6 支持(默认)意味着您的容器仅分配了 ipv4,但 docker-proxy 将 v6“翻译”为 v4 :
(ipv6 世界) -> docker 主机 ipv6:8080 -> [docker-proxy] -> nginx 容器 ipv4:80
归档时间: |
|
查看次数: |
5082 次 |
最近记录: |