Maison > développement back-end > Golang > 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é

王林
Libérer: 2024-02-13 12:00:10
avant
1002 Les gens l'ont consulté

如何获取未运行的 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
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal