目录

1.问题描述

2.排查过程

2.1确认api-server 容器端口是6443

2.2确认windows 的6443 是不是docker 暴漏出来

2.3 执行 docker  inspect 命令,继续观察

3.问题总结

4.问题反思


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  

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐