docker ps 命令查看容器ports字段为空排查
api-server 容器共享了 d0ca 容器的网络栈 ,d0ca 容器直接使用的host模式网络,host模式的网络不会获得一个独立的网络命名空间,而是直接使用宿主机的IP地址和端口空间
目录
2.2确认windows 的6443 是不是docker 暴漏出来
1.问题描述:
windows Dockerdestop 启用了 kubernetes, k8s api-server http://127.0.0.1:6443/ 从windows 能正常访问 ,执行 docker ps 命令 ports 为空。

2.排查过程:
2.1确认api-server 容器端口是6443

2.2确认windows 的6443 是不是docker 暴漏出来:
windows cmd 依次执行命令:
netstat -ano | findstr 6443
tasklist | findstr 8300

看上去就是docker 直接暴漏出来,中间没有使用其他代理软件,那为什么没有docker ps 命令的 ports 字段为空呢(这里触发了知识盲区,后续解释) ?
2.3 执行 docker inspect 命令,继续观察
docker inspect 7afd82b5a51e
观察发现,NetworkMOde :container:d0ca 是另外一个容器。

继续 inspect d0ca 容器, 发现NetworkId

网络搜索发现NetworkID 对应 networking 对象

熟悉的关键词出现了 host , 原来 api-server 容器用了 host 网络模式。
3.问题总结:
NetworkMode": "container:d0ca5ce857fe3a3c97d2dccfde699052937457303affce7ce3c0e5096a4a2f3b
api-server 容器共享了 d0ca 容器的网络栈 ,
d0ca 容器直接使用的host模式网络,host模式的网络不会获得一个独立的网络命名空间,而是直接使用宿主机的IP地址和端口空间
4.问题反思:
之前使用docker一直用的是默认bridge 模式 , 所以网络模式这一块属于知识盲区,导致排查问题饶了一个大圈。

bridge 模式加 -p 参数后端口才能映射到宿主机, docker ps ports 才会有数据
例如: docker run -p 8080:80 nginx
更多推荐
所有评论(0)