Documentation
¶
Overview ¶
Package exited diagnostique un conteneur arrêté en erreur à partir de son état et de la fin de son journal, sans accès au démon (feature 004) : motif reconnu dans le journal, puis état du conteneur, puis signification du code de sortie.
Index ¶
- Constants
- Variables
- func Age(d time.Duration) string
- func Bytes(n int64) string
- func Duration(d time.Duration) string
- func Find(r Lister, name string) (dockerread.Container, error)
- func ParseSince(s string) (string, error)
- func Select(r Lister) ([]dockerread.Container, error)
- type Diagnosis
- type Input
- type Launch
- type Lister
- type NotFoundError
- type WatchResult
Constants ¶
const ( SourceState = "state" // fait enregistré par Docker ou le noyau (OOM, erreur de démarrage) SourceLog = "log" // motif reconnu dans la fin du journal SourceCode = "code" // signification du code de sortie SourceUnknown = "unknown" // aucune cause précise : TELEMACH ne devine pas (FR-005) )
Sources d'une cause, de la plus sûre à la plus générale.
const LogWindow = 10
LogWindow est le nombre de dernières lignes du journal où un motif est cherché : une ligne plus ancienne a peu de chances d'expliquer l'arrêt (LL-010).
const MaxInspect = 12
MaxInspect est le nombre de candidats inspectés en un appel : de 12 à 25 ms par conteneur selon la charge (research R4, T031) ; 12 couvrent l'analyse et les 10 autres listés.
Variables ¶
var ( // ErrRunning : le conteneur désigné est en cours d'exécution. ErrRunning = errors.New("conteneur en cours d'exécution") // ErrNotFailed : le conteneur désigné s'est arrêté avec le code 0. ErrNotFailed = errors.New("conteneur arrêté sans erreur") )
Functions ¶
func Duration ¶
Duration exprime une durée courte en français : « moins d'une seconde », « 3 s », « 2 min », « 4 h », « 2 j ».
func Find ¶
func Find(r Lister, name string) (dockerread.Container, error)
Find renvoie le conteneur désigné par son nom ou un préfixe de son identifiant.
func ParseSince ¶
ParseSince valide l'heure de début relevée par le shell ($EPOCHREALTIME), avec un point ou une virgule (bash en locale française), et la renvoie au format de « docker events » : décimales tronquées à la nanoseconde (zsh en donne 10).
Types ¶
type Diagnosis ¶
Diagnosis est la cause retenue et les valeurs pour les gabarits du catalogue.
func Diagnose ¶
Diagnose cherche la cause de l'arrêt (research R7), dans cet ordre : manque de mémoire enregistré par le noyau ; motif sur l'erreur de démarrage enregistrée par Docker ; motif sur les dernières lignes du journal, de la plus récente à la plus ancienne ; erreur de démarrage sans motif ; code de sortie ; sinon cause inconnue.
type Input ¶
type Input struct {
Container dockerread.Container
Log dockerread.LogExcerpt
}
Input est ce qui est connu du conteneur : son état et la fin de son journal.
type Launch ¶
type Launch struct {
Image string
Name string // valeur de --name, si donnée
AutoRemove bool // --rm : le conteneur est supprimé à l'arrêt
}
Launch est un « docker run » lancé en arrière-plan, tel que tapé (research R5).
func ParseLaunch ¶
ParseLaunch reconnaît un « docker run » (ou « container run ») avec -d/--detach placé avant l'image ; toute autre ligne n'entraîne aucune lecture du démon.
type Lister ¶
type Lister interface {
ListCandidates() ([]dockerread.Candidate, error)
Inspect(ids ...string) ([]dockerread.Container, error)
}
Lister est la partie de dockerread.Runner utilisée pour choisir les conteneurs.
type NotFoundError ¶
NotFoundError : aucun conteneur ne porte ce nom ; Suggestions propose des noms proches.
func (*NotFoundError) Error ¶
func (e *NotFoundError) Error() string
type WatchResult ¶
type WatchResult struct {
Name string
Failed bool // arrêté avec un code ≠ 0
Code int // code de sortie (si Failed)
After time.Duration // délai entre la création et l'arrêt
Removed bool // supprimé par --rm : son journal est perdu
}
WatchResult est l'issue d'un lancement en arrière-plan.
func Match ¶
func Match(evs []dockerread.Event, l Launch) (WatchResult, bool)
Match retrouve le conteneur lancé : premier « create » de cette image (et de ce nom, si --name a été donné), puis son « die ». Sans « die », il tourne toujours.