问题描述
在尝试从diego-cell VM访问runC容器时,遇到了问题。当他尝试运行/var/vcap/packages/runc/bin/runc exec -t <instance_id> /bin/bash
命令时,出现了exec failed: container "<id>" does not exist
错误。用户在运行cfdot
命令时可以看到该实例的ID,也可以在/var/vcap/data/garden/depot/<container_id>
路径下找到该容器。但是,runc无法打开该容器。用户还尝试运行runc list
命令,但在VM中看不到正在运行的容器列表。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据用户的描述,这可能是由于containerd的更改导致的。在PCF 2.5中,runc list
命令正常工作,但在2.6中,runc list
命令不显示任何内容。尚未找到相应的命令来查找容器ID以及如何执行shell进入该容器实例,但我正在努力解决这个问题。
方案2
用户在评论中提到了一种解决方法,可以尝试按照以下步骤操作:
1. 使用cf app <app_name> --guid
命令获取实例GUID。
2. 使用cf curl v2/apps/$(cf app <app-name> --guid)/stats | grep host
命令查找运行应用实例的主机。
3. 运行bosh vms | grep <cell_ip>
命令,找到要ssh的Diego cell。
4. 在Diego cell中,以root身份运行以下命令,获取容器GUID/实例GUID:
cfdot actual-lrp-groups-for-guid <process_guid_from_step_1> | jq '.instance | select (.address == "<diego_cell_ip>")' | jq .instance_guid
- 然后,在适当的Diego cell终端上运行以下命令:
sudo /var/vcap/packages/containerd/bin/ctr -a /var/vcap/sys/run/containerd/containerd.sock -n garden tasks exec --exec-id my-shell --tty <instance-guid> /bin/sh
这样,您就可以进入shell了。
请注意,这个解决方案是基于用户的评论,并且可能需要根据您的具体情况进行调整。
方案3
用户在评论中提到,这可能是由于自定义修改的CF版本导致的。如果您使用的是自定义构建的CF版本,可能需要与使用cf-deployment安装的基础设施进行比较,并查找部署、发布版本以及单元格的部署和配置方面的差异。
请注意,这个解决方案是基于用户的评论,并且可能需要根据您的具体情况进行调整。
方案4
如果以上解决方案都无法解决您的问题,建议您咨询相关技术支持或社区论坛,以获取更多帮助和支持。
以上是针对用户问题的解决方案,希望能对您有所帮助。