package docker import ( "context" "fmt" "log/slog" "os" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) var ( logger = slog.New(slog.NewJSONHandler(os.Stdout, nil)) ) func GetShipStatus(patps []string) (map[string]string, error) { statuses := make(map[string]string) cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { errmsg := fmt.Sprintf("Error getting Docker info: %v", err) logger.Error(errmsg) return statuses, err } else { containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{}) if err != nil { errmsg := fmt.Sprintf("Error getting containers: %v", err) logger.Error(errmsg) return statuses, err } else { for _, pier := range patps { found := false for _, container := range containers { for _, name := range container.Names { fasPier := "/" + pier if name == fasPier { statuses[pier] = container.Status found = true break } } if found { break } } if !found { statuses[pier] = "not found" } } } return statuses, nil } } func GetContainerNetwork(name string) (string, error) { cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { return "", err } defer cli.Close() containerJSON, err := cli.ContainerInspect(context.Background(), name) if err != nil { return "", err } for networkName := range containerJSON.NetworkSettings.Networks { return networkName, nil } return "", fmt.Errorf("container is not attached to any network") }