Kubernetes多容器Pod中如何指定目标容器登录?
问题解决:Deployment多容器配置错误及kubectl exec容器指定方法
一、为什么每个Pod只运行了一个容器?
你的Deployment配置存在YAML语法错误:重复定义了containers字段。在YAML规则中,相同的键会被后续的内容覆盖,所以原本的django容器配置被后面的nginx容器配置替换,最终每个Pod只启动了nginx这一个容器,这就是kubectl get pods显示1/1的原因。
修正后的Deployment配置需将两个容器放在同一个containers列表下:
apiVersion: apps/v1 kind: Deployment metadata: name: ol000dep spec: selector: matchLabels: app: ol000kube replicas : 2 template: metadata: labels: app: ol000kube spec: containers: - name: django image: django:local ports: - containerPort: 8011 - name: nginx image: nginx:local ports: - containerPort: 80
修改后重新应用配置:kubectl apply -f your-deployment.yaml,后续就能看到每个Pod的READY状态变为2/2。
二、关于kubectl exec的容器登录问题
kubectl exec命令本质是登录到Pod内的某个容器,而非Pod本身——Pod是共享网络、存储资源的容器集合,本身无法直接登录。如果执行命令时未指定容器,kubectl会默认选择Pod里的第一个容器(或标记为默认容器的实例)。
要指定目标容器,只需添加-c参数:
- 登录django容器:
kubectl exec -it ol000dep-bc96bfc98-r9lrj -c django /bin/bash - 登录nginx容器:
kubectl exec -it ol000dep-bc96bfc98-r9lrj -c nginx /bin/bash
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

