Maison  >  Article  >  développement back-end  >  Comment obtenir le code de sortie d'un conteneur Docker non exécuté

Comment obtenir le code de sortie d'un conteneur Docker non exécuté

王林
王林avant
2024-02-13 12:00:10982parcourir

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

l'éditeur php Xiaoxin vous présentera comment obtenir le code de sortie d'un conteneur Docker non exécuté. Lors de l'utilisation de Docker, nous devons parfois afficher le code de sortie du conteneur lors de sa fermeture pour un dépannage ou un débogage. Cependant, lorsque le conteneur n'est pas en cours d'exécution, nous ne pouvons pas utiliser directement la commande `docker logs` pour obtenir le code de sortie. Dans cet article, nous présenterons une méthode pour obtenir le code de sortie d'un conteneur Docker non en cours d'exécution afin de vous aider à mieux gérer les problèmes liés aux conteneurs.

Contenu de la question

J'ai besoin d'obtenir le code de sortie d'un conteneur qui est dans un état non exécuté. Je sais que le conteneur ne fonctionne pas, je reçois ces informations de différentes sources.

Existe-t-il un moyen dans le SDK go de Docker d'obtenir le code de sortie sans avoir à attendre que le conteneur soit dans un certain état ? Par exemple, que propose ContainerWaitWaitResponse ?

Est-ce qu'appeler simplement ContainerWait dans un état où mon conteneur n'existe plus est une bonne solution ? Ou bien y a-t-il une meilleure solution?

Je souhaite particulièrement éviter ContainerWait car je vois que cet appel coûte très cher. Chaque appel de conteneur à consting prend environ 10 millisecondes si l'état du conteneur est arrêté, et 20 à 50 millisecondes si le conteneur est redémarré.

Solution

Le code de sortie se trouve à containerstate 结构。这嵌入在 响应中的 <code>state 字段中(*client).containerinspect().

Par exemple :

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
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer