首页 >后端开发 >Golang >如何获取未运行的 Docker 容器的退出代码

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

王林
王林转载
2024-02-13 12:00:101000浏览

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

php小编小新为您介绍如何获取未运行的Docker容器的退出代码。在使用Docker时,有时我们需要查看容器在退出时的退出代码以便进行故障排查或调试。然而,当容器未运行时,我们无法直接使用`docker logs`命令来获取退出代码。在本文中,我们将介绍一种方法来获取未运行的Docker容器的退出代码,以帮助您更好地处理容器相关问题。

问题内容

我需要获取处于非运行状态的容器的退出代码。 我知道容器没有运行,我从不同的来源获取此信息。

Docker的go SDK中有没有一种方法可以获取退出代码,而不必等待容器处于某种状态? 比如ContainerWaitWaitResponse提供了什么?

在我已经不存在容器的状态下简单地调用 ContainerWait 是一个好的解决方案吗?或者有更好的解决方案吗?

我对避免 ContainerWait 特别感兴趣,因为我可以看到该调用非常昂贵。 如果容器的状态已停止,则每个容器的调用 consting 大约需要 10 毫秒;如果容器处于重新启动状态,则调用 consting 需要 20 到 50 毫秒。

解决方法

退出代码位于 containerstate 结构。这嵌入在 响应中的 <code>state 字段中(*client).containerinspect().

例如:

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
}

以上是如何获取未运行的 Docker 容器的退出代码的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除