docker.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package docker
  2. import (
  3. "context"
  4. "fmt"
  5. "log/slog"
  6. "os"
  7. "github.com/docker/docker/api/types"
  8. "github.com/docker/docker/client"
  9. )
  10. var (
  11. logger = slog.New(slog.NewJSONHandler(os.Stdout, nil))
  12. )
  13. func GetShipStatus(patps []string) (map[string]string, error) {
  14. statuses := make(map[string]string)
  15. cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
  16. if err != nil {
  17. errmsg := fmt.Sprintf("Error getting Docker info: %v", err)
  18. logger.Error(errmsg)
  19. return statuses, err
  20. } else {
  21. containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{})
  22. if err != nil {
  23. errmsg := fmt.Sprintf("Error getting containers: %v", err)
  24. logger.Error(errmsg)
  25. return statuses, err
  26. } else {
  27. for _, pier := range patps {
  28. found := false
  29. for _, container := range containers {
  30. for _, name := range container.Names {
  31. fasPier := "/" + pier
  32. if name == fasPier {
  33. statuses[pier] = container.Status
  34. found = true
  35. break
  36. }
  37. }
  38. if found {
  39. break
  40. }
  41. }
  42. if !found {
  43. statuses[pier] = "not found"
  44. }
  45. }
  46. }
  47. return statuses, nil
  48. }
  49. }