卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章35553本站已运行397

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

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

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

问题内容

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

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

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

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

解决方法

退出代码位于 containerstate 结构。这嵌入在 响应中的 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
}
卓越飞翔博客
上一篇: Sublime Text 中的 LSP-gopls 在 $HOME 中创建 go 目录而不是自定义位置
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏