Go语言 如何获取未运行的Docker容器的退出代码

kb5ga3dv  于 2023-04-27  发布在  Go
关注(0)|答案(1)|浏览(134)

我需要获取处于非运行状态的容器的退出代码。我知道容器没有运行,我从不同的来源获得此信息。
在Docker的go SDK中有没有一种方法可以获得退出代码,而不必等待容器处于特定状态?例如ContainerWaitWaitResponse提供?
简单地调用ContainerWait并声明容器已经不存在是一个好的解决方案吗?或者有更好的解决方案吗?
我特别感兴趣的是避免ContainerWait,因为我可以看到调用是相当昂贵的。与调用consting ~ 10 ms每个容器,如果它的状态是停止和20和50 ms之间,如果contaner是在重新启动状态。

gt0wga4j

gt0wga4j1#

退出代码在ContainerState结构中。它嵌入在来自(*Client).ContainerInspect()的响应中的State字段中。
例如:

func checkExitStatus(ctx context.Context, client *client.Client, containerID string) error {
  inspection, err := client.ContainerInspect(ctx, containerID)
  if err != nil {
    return err
  }

  // Possible values are listed in the `ContainerState` docs; there do not
  // seem to be named constants for these values.
  if inspection.State.Status != "exited" {
    return errors.New("container is not exited")
  }

  if inspection.State.ExitCode != 0 {
    return fmt.Errorf("container exited with status %d", inspection.State.ExitCode)
  }

  return nil
}

相关问题