Helm显示Drupal Pod已运行,但Docker无容器且网站无法访问
问题排查与解决方案
一、为什么宿主机docker ps看不到容器?
Minikube是独立的Kubernetes运行环境,它会创建专属的虚拟机(或用Docker容器作为K8s节点),所有Pod内的容器都运行在这个Minikube节点内部,而非宿主机的Docker环境中。要查看这些容器,需要进入Minikube节点:
- 执行命令进入Minikube节点:
minikube ssh - 在节点内部执行:
docker ps,就能看到mysite-drupal和mysite-mariadb相关的容器了。
二、网站无法访问的排查步骤
1. 确认服务暴露方式
先查看Drupal服务的类型和端口:
kubectl get svc
- 如果服务类型是
ClusterIP:默认只能在K8s集群内部访问,需要通过端口转发暴露到宿主机:- 方式一:用Minikube自带命令自动转发并打开访问地址:
minikube service mysite-drupal - 方式二:手动端口转发:
然后访问kubectl port-forward svc/mysite-drupal 8080:80http://localhost:8080/测试。
- 方式一:用Minikube自带命令自动转发并打开访问地址:
- 如果服务类型是
NodePort:先获取Minikube节点IP:
然后访问minikube iphttp://<minikube-ip>:<node-port>/(node-port是kubectl get svc结果里mysite-drupal的端口列第二个数值)。
2. 检查本地DNS解析
书籍中提到的http://drupal.local/需要手动配置本地DNS解析:
- 执行
minikube ip获取Minikube节点IP - 编辑本地hosts文件:
- Linux/macOS:
sudo nano /etc/hosts - Windows:以管理员身份编辑
C:\Windows\System32\drivers\etc\hosts
- Linux/macOS:
- 添加一行:
<minikube-ip> drupal.local,保存后再访问该域名。
3. 验证服务与Pod的连通性
检查服务是否正确关联到Pod:
kubectl describe svc mysite-drupal
查看Endpoints字段,确认里面存在Drupal Pod的IP和对应端口(默认80),如果为空,说明服务和Pod的标签匹配有问题,需要检查Pod的标签和服务的选择器是否一致。
4. 确认网络连通性
如果以上步骤都没问题,可尝试在Minikube节点内部测试访问Drupal Pod:
- 进入Minikube节点:
minikube ssh - 执行
curl <drupal-pod-ip>:80(Pod IP可通过kubectl get pods -o wide获取),如果能返回页面内容,说明Pod内部服务正常,问题出在宿主机到Minikube的网络转发或DNS配置上。
内容的提问来源于stack exchange,提问作者Marc Le Bihan
相关产品推荐
相关产品推荐

