首页 > 后端开发 > Golang > 正文

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

王林
发布: 2024-02-13 12:00:10
转载
955 人浏览过

如何获取未运行的 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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!