mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 10:25:52 +02:00
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package docker
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/docker/docker/client"
|
|
"github.com/uozi-tech/cosy"
|
|
)
|
|
|
|
type ContainerStatus int
|
|
|
|
const (
|
|
ContainerStatusCreated ContainerStatus = iota
|
|
ContainerStatusRunning
|
|
ContainerStatusPaused
|
|
ContainerStatusRestarting
|
|
ContainerStatusRemoving
|
|
ContainerStatusExited
|
|
ContainerStatusDead
|
|
ContainerStatusUnknown
|
|
ContainerStatusNotFound
|
|
)
|
|
|
|
var (
|
|
containerStatusMap = map[string]ContainerStatus{
|
|
"created": ContainerStatusCreated,
|
|
"running": ContainerStatusRunning,
|
|
"paused": ContainerStatusPaused,
|
|
"restarting": ContainerStatusRestarting,
|
|
"removing": ContainerStatusRemoving,
|
|
"exited": ContainerStatusExited,
|
|
"dead": ContainerStatusDead,
|
|
}
|
|
)
|
|
|
|
// GetContainerStatus checks the status of a given container.
|
|
func GetContainerStatus(ctx context.Context, containerID string) (ContainerStatus, error) {
|
|
cli, err := initClient()
|
|
if err != nil {
|
|
return ContainerStatusUnknown, cosy.WrapErrorWithParams(ErrClientNotInitialized, err.Error())
|
|
}
|
|
defer cli.Close()
|
|
|
|
containerJSON, err := cli.ContainerInspect(ctx, containerID)
|
|
if err != nil {
|
|
if client.IsErrNotFound(err) {
|
|
return ContainerStatusNotFound, nil // Container doesn't exist
|
|
}
|
|
return ContainerStatusUnknown, cosy.WrapErrorWithParams(ErrInspectContainer, err.Error())
|
|
}
|
|
|
|
// Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead"
|
|
status, ok := containerStatusMap[containerJSON.State.Status]
|
|
if !ok {
|
|
return ContainerStatusUnknown, ErrContainerStatusUnknown
|
|
}
|
|
return status, nil
|
|
}
|