重启容器失败

容器hook耗时较长,且启动阶段遇到containerd强杀,再次执行容器start操作可能失败。容器启动阶段遇到containerd被强杀,docker start操作直接返回错误;containerd被重新拉起后,上次启动可能仍处于runc create执行阶段(执行用户自定义hook,可能耗时较长),此时再次下发docker start命令启动该容器,可能提示以下错误:

  1. Error response from daemon: oci runtime error: container with id exists: xxxxxx

该错误是由runc create一个已经存在(创建中)的容器导致,等第一次start对应的runc操作结束后再次执行docker start便可以成功。

由于hook的执行不受docker控制,这种场景下尝试回收该容器有可能导致containerd进程启动卡死(执行未知hook程序),且问题的风险可控(短期影响当前容器的创建):

  • 问题出现后等待第一次操作结束可以再次成功启动该容器。
  • 一般是在容器启动失败后创建新的容器,不复用已经失败的容器。

综上,该问题暂时作为场景约束。