Heim  >  Artikel  >  Backend-Entwicklung  >  So erhalten Sie den Exit-Code eines nicht ausgeführten Docker-Containers

So erhalten Sie den Exit-Code eines nicht ausgeführten Docker-Containers

王林
王林nach vorne
2024-02-13 12:00:10936Durchsuche

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

php-Editor Xiaoxin stellt Ihnen vor, wie Sie den Exit-Code eines nicht laufenden Docker-Containers erhalten. Bei der Verwendung von Docker müssen wir manchmal den Exit-Code des Containers anzeigen, wenn er zur Fehlerbehebung oder zum Debuggen beendet wird. Wenn der Container jedoch nicht läuft, können wir den Befehl „docker logs“ nicht direkt verwenden, um den Exit-Code abzurufen. In diesem Artikel stellen wir eine Methode vor, mit der Sie den Exit-Code eines nicht ausgeführten Docker-Containers abrufen können, damit Sie Probleme im Zusammenhang mit Containern besser lösen können.

Frageninhalt

Ich benötige den Exit-Code eines Containers, der sich in einem nicht ausgeführten Zustand befindet. Ich weiß, dass der Container nicht läuft, ich beziehe diese Informationen aus verschiedenen Quellen.

Gibt es im Go SDK von Docker eine Möglichkeit, den Exit-Code abzurufen, ohne darauf warten zu müssen, dass sich der Container in einem bestimmten Zustand befindet? Was bietet beispielsweise ContainerWaitWaitResponse?

Ist ein einfacher Anruf ContainerWait in einem Zustand, in dem mein Container nicht mehr existiert, eine gute Lösung? Oder gibt es eine bessere Lösung?

Ich bin besonders daran interessiert, ContainerWait zu vermeiden, weil ich mir vorstellen kann, dass dieser Anruf sehr teuer ist. Jeder Containeraufruf an consting dauert etwa 10 Millisekunden, wenn der Containerstatus gestoppt ist, und 20 bis 50 Millisekunden, wenn der Container neu gestartet wird.

Workaround

Der Exit-Code befindet sich unter containerstate 结构。这嵌入在 响应中的 <code>state 字段中(*client).containerinspect().

Zum Beispiel:

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
}

Das obige ist der detaillierte Inhalt vonSo erhalten Sie den Exit-Code eines nicht ausgeführten Docker-Containers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen