docker - 为什么 HostPort 没有显示在来自主机的 Netstat 的输出中
问题描述
我使用带有 yaml 文件的 kubectl 创建目标 pod,发现 pod 中的进程正在按预期监听目标端口。
令我惊讶的是,在主机的输出或netstat -tunlp
来自主机的输出中看不到端口。但是如果我尝试 telnet localhost targetPort 就可以了!!!netstat -alp
netstat -an
为什么会这样??有人可以解释一下吗?
解决方案
这是因为docker
. 默认情况下,docker 不会将容器网络命名空间添加到 linux 运行时数据(/var/run 作为 /run 中的 tmpfs 挂载),这是您在运行 ipnetns
命令时看到的。
要查看您需要使用的网络命名空间nsenter
。
- 获取容器 ID。
docker ps
- 获取容器进程 ID。
docker inspect --format '{{ .State.Pid }}' <<container-id>>
- 现在使用 nsenter 显示 pods 网络空间。使用
nsenter
overdocker exec
的优点是 nsenter 将使您能够执行 pod 内节点上可用的所有工具或命令,而 asdocker exec
将只允许有限或受限的命令。
nsenter -t <<container pid>> -n netstat -tunlp