docker - 为什么 HostPort 没有显示在主机 Netstat 的输出中

标签 docker ubuntu kubernetes kubectl

我使用kubectl和yaml文件创建目标pod,发现pod中的进程正在监听目标端口。

令我惊讶的是,在主机的 netstat -tunlpnetstat -alpnetstat -an 的输出中看不到该端口机器。但如果我尝试 telnet localhost targetPort 就可以了!!!

为什么会出现这种情况?谁能解释一下吗?

最佳答案

这是因为docker。默认情况下,docker 不会将容器网络命名空间添加到 Linux 运行时数据(/var/run 作为/run 中的 tmpfs 安装),这是您运行 ip netns 命令时看到的内容。

要查看网络命名空间,您需要使用nsenter

  1. 获取容器 ID。
docker ps
  • 获取容器进程 ID。
  • docker inspect --format '{{ .State.Pid }}' <<container-id>>
    
  • 现在使用 nsenter 显示 pod 网络空间。与 docker exec 相比,使用 nsenter 的优点是,nsenter 将使您能够执行 pod 内节点上可用的所有工具或命令,其中 docker exec > 将仅允许有限或受限制的命令。
  • nsenter -t <<container pid>> -n netstat -tunlp 
    
    

    关于docker - 为什么 HostPort 没有显示在主机 Netstat 的输出中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63454535/

    相关文章:

    docker - 在同一个docker network localhost上运行多个容器

    Ubuntu:如何将文本从在 ssh 上运行 vim 的终端复制到本地剪贴板

    centos - CentOS 上的本地 Kubernetes

    kubernetes - 如何将文件从 kubernetes Pod 复制到本地系统

    PHP CLI - 错误 : could not find an available, 在分配给网络的默认值中不重叠的 IPv4 地址池

    postgresql - 从 new-app 命令在 openshift 中构建 keycloak docker hub 镜像

    PHP mail() 与 ssmtp

    kubernetes - 节点实例普罗米修斯列表

    docker - 无法连接到 containerd

    bash - 在 ubuntu 上查看 OpenMP 环境变量