Kubernetes pod正在运行,但docker ps不提供任何输出

时间:2017-05-25 13:23:24

标签: docker kubernetes

我一直在尝试使用kubernetes在群集上的端口5000上运行tomcat容器。但是当我使用kubectl create -f tmocat_pod.yaml时,它会创建pod但是docker ps不会提供任何输出。为什么会这样?

理想情况下,当它运行pod时,意味着它正在该pod中运行容器,并且该容器在yaml文件中定义。 为什么docker ps没有显示任何容器正在运行? 我关注以下网址:

如何让它运行并在端口5000上看到tomcat在浏览器上运行。

7 个答案:

答案 0 :(得分:3)

docker容器应在虚拟机上运行。由于我只在本地计算机上安装了minikube,因此我确认以下内容将带来您想要的东西:

minikub ssh
...
docker ps

只需尝试使用minikube ssh的kubernetes。

答案 1 :(得分:1)

我不确定您在哪里运行docker ps命令,但是如果您尝试从主机执行此操作并且k8s群集位于其他位置,即您的计算机不是群集中的节点,docker ps不会返回任何内容,因为容器未绑定到docker主机。

假设您的广告连播正在投放,kubectl get pods将显示所有正在运行的广告连播。要查看更多详细信息,您可以使用kubectl describe pod <yourpodname>检查每个容器的状态(非常详细)。要获取pod名称,您应该能够使用tab-complete和kubernetes cli。此外,如果您的pod包含多个容器,您还需要提供容器名称,您可以在选择容器后使用tab-complete。

输出类似于:

kubectl describe pod comparison-api-dply-reborn-6ffb88b46b-s2mtx
Name:           comparison-api-dply-reborn-6ffb88b46b-s2mtx
Namespace:      default
Node:           aks-nodepool1-99697518-0/10.240.0.5
Start Time:     Fri, 20 Apr 2018 14:08:21 -0400
Labels:         app=comparison-pod-reborn
                pod-template-hash=2996446026
...
Status:         Running
IP:             *.*.*.*
Controlled By:  ReplicaSet/comparison-api-dply-reborn-6ffb88b46b
Containers:
  rabbit-mq:
    ...
    Port:           5672/TCP
    State:          Running
    ...

如果您的容器和容器已在运行,那么您不需要对它们进行太多故障排除。要使它们可以从公共互联网访问,请查看服务(https://kubernetes.io/docs/concepts/services-networking/service/),以使您的API的IP地址固定且易于访问。

答案 2 :(得分:1)

在Kubernetes中,Docker contaienrs在Pods上运行,而Pods在Nodes上运行,而Nodes在您的机器上运行(minikube / GKE)

运行kubectl create -f tmocat_pod.yaml时,基本上创建了一个容器,它在该容器上运行docker容器。

拥有此Pod的节点基本上是一个虚拟实例,如果您可以“ SSH”进入该节点,则docker ps可以工作。

您需要的是: kubectl get pods <-就像docker ps一样,它向您显示所有正在运行的pod(将其视为docker容器)

kubectl get nodes <-查看Pod的主机。

kubectl describe pods <pod-name> <-查看Pod的系统日志

kubectl logs <pod-name> <-将为您提供特定Pod的日志。

答案 3 :(得分:1)

您可以将您的终端与Docker服务器连接,在您的Node / VM内部运行。

在终端中使用以下命令eval $(minikube docker-env)

答案 4 :(得分:0)

你有没有尝试过#34; docker ps -a&#34;看容器是否已经死了?如果它在那里你可以看到它的日志&#34; docker logs&#34;也许这会给你一个提示。

答案 5 :(得分:0)

如果您的pod正在成功运行,并且如果您要在安排pod的节点上查找容器,则问题可能是kubernetes正在使用不同的容器运行时。

实施例

docker ps

在这里,我能够执行pod,并且我在安排pod的同一节点中,但--container-runtime-endpoint=unix:///var/run/cri-containerd.sock没有显示容器。在我的情况下,kubelet使用不同的容器运行时,kubelet服务的一个参数是pthread_mutex_lock

答案 6 :(得分:0)

可能是您没有使用 docker 作为容器运行时。 我遇到了同样的问题,我忘了我用 runsc 作为处理程序切换到 gVisor。

cat /etc/default/kubelet 
KUBELET_EXTRA_ARGS="--container-runtime remote --container-runtime-endpoint unix:///run/containerd/containerd.sock"

如果是这样,您需要使用 runsc 命令而不是 docker。