当前位置: 首页> 教育> 就业 > 关于netstat查不到映射端口的连接信息的原因

关于netstat查不到映射端口的连接信息的原因

时间:2025/7/9 9:38:19来源:https://blog.csdn.net/zs520ct/article/details/140872766 浏览次数:1次

在宿主机上使用 netstat -ano 无法查到公网访问容器映射的端口连接信息,但可以查到内网IP访问容器映射端口的信息,而在容器中 netstat -ano 都可以查到,这是因为 Docker 的网络命名空间隔离和 NAT(网络地址转换)规则导致的。

关键点解析

  1. 网络命名空间隔离

    • 容器运行在独立的网络命名空间中,因此容器内部的网络连接和端口状态在宿主机上不可见,反之亦然。
  2. NAT 和端口映射

    • Docker 使用 NAT 来实现宿主机端口到容器端口的映射。当一个公网IP访问宿主机的映射端口时,数据包首先到达宿主机的网络堆栈,然后通过 NAT 转发到相应的容器。
    • 宿主机上的 netstat 显示的是宿主机网络堆栈中的连接,而不是容器内的连接。这意味着公网IP的连接可能被 docker-proxy 或 NAT 处理,不直接显示在宿主机的 netstat 结果中。

内网IP访问 vs 公网IP访问

  • 内网IP访问

    • 内网IP直接访问容器的映射端口,宿主机上的 netstat 可以显示这些连接,因为这些连接没有经过复杂的 NAT 转发。
  • 公网IP访问

    • 公网IP访问宿主机的映射端口,连接经过 NAT 转发到容器。这些连接在宿主机上可能仅显示为 docker-proxy 进程,而具体的连接信息则存在于容器内部的网络堆栈中。

具体示例

假设你有一个 Nginx 容器,宿主机的 8080 端口映射到容器的 80 端口:

docker run -d -p 8080:80 nginx
宿主机上的 netstat -ano 示例

在宿主机上,使用 netstat -ano

netstat -anop | grep 8080

可能看到的输出:

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1234/docker-proxy
  • 这里显示的是宿主机上的 8080 端口在监听,由 docker-proxy 处理。

如果有内网IP访问,可以看到类似于:

tcp        0      0 192.168.1.100:8080      192.168.1.101:56789     ESTABLISHED 1234/docker-proxy
  • 显示的是内网IP访问的连接信息。
容器内部的 netstat -ano 示例

在容器内部,使用 netstat -ano

docker exec -it <container_id> /bin/bash
netstat -ano

可能看到的输出:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx
tcp        0      0 172.17.0.2:80           192.168.1.100:56789     ESTABLISHED 1/nginx
tcp        0      0 172.17.0.2:80           203.0.113.50:12345      ESTABLISHED 1/nginx
  • 容器内部可以看到所有连接,包括内网和公网的访问连接。

解决方法和验证步骤

  1. 检查 Docker 端口映射

    docker ps
    

    确认端口映射正确。

  2. 使用 ss 命令
    在宿主机上,ss 命令可能比 netstat 提供更详细的连接信息:

    ss -tuln | grep 8080
    
  3. 检查 iptables 规则

    sudo iptables -t nat -L -n
    

    查看 Docker 的 NAT 规则,确认端口映射。

  4. 检查 docker-proxy 进程

    ps aux | grep docker-proxy
    

总结

由于 Docker 的网络隔离和 NAT 机制,宿主机上的 netstat -ano 可能无法直接显示公网访问的容器端口连接信息。这些连接信息在容器内部是可见的,因为连接最终终止在容器的网络堆栈中。通过理解和配置 Docker 网络,可以更好地调试和管理容器的网络连接。

关键字:关于netstat查不到映射端口的连接信息的原因

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: