12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 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
- }
|