Docker与netstat:为何宿主机netstat无法显示容器端口的连接?
为什么Docker端口转发后宿主机netstat看不到已建立连接?
- Docker的端口映射靠Linux内核的iptables NAT机制实现,不是用用户态进程(比如反向代理)来转发流量。netstat/ss这类工具默认只显示和用户态进程挂钩的网络连接,内核层面的NAT转发连接不会被它们直接列出来。
- 当客户端连宿主机的8080端口时,内核通过iptables的DNAT规则直接把数据包转去容器的80端口,整个转发全在内核空间完成,没有用户态进程参与中间的连接维护,所以netstat查不到这条已建立的连接条目。
- 要查看这类内核层面的NAT连接,得用专门的内核网络工具,比如
conntrack -L或者带参数的ss -tunp state established(部分场景下ss能显示关联的iptables连接)。
内容的提问来源于stack exchange,提问作者timmornYE
相关产品推荐
相关产品推荐

