首頁  >  文章  >  後端開發  >  如何取得未運行的 Docker 容器的退出程式碼

如何取得未運行的 Docker 容器的退出程式碼

王林
王林轉載
2024-02-13 12:00:10934瀏覽

如何获取未运行的 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刪除