package logic import ( "context" "ecs/proto" "fmt" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/client" "github.com/oylshe1314/framework/util" "strings" ) type AdminManager struct { client *client.Client context context.Context cancel context.CancelFunc } func (this *AdminManager) Init() error { var err error this.client, err = client.NewClientWithOpts(client.WithHost("192.168.84.132:2375"), client.WithVersion("1.51")) if err != nil { return err } this.context, this.cancel = context.WithCancel(context.Background()) return nil } func (this *AdminManager) Close() error { this.cancel() _ = this.client.Close() return nil } func (this *AdminManager) ContainerList(name string) ([]*proto.Container, error) { summaries, err := this.client.ContainerList(this.context, container.ListOptions{ Size: false, All: false, Latest: false, Since: "", Before: "", Limit: 0, Filters: filters.Args{}, }) if err != nil { return nil, err } var containers []*proto.Container for _, summary := range summaries { containers = append(containers, &proto.Container{ ID: summary.ID, Names: strings.Join(summary.Names, ","), Image: summary.Image, ImageID: summary.ImageID, Command: summary.Command, Created: summary.Created, Ports: strings.Join(util.SliceConvert(summary.Ports, func(port container.Port) string { return fmt.Sprint(port.IP, ":", port.PrivatePort, ":", port.PublicPort) }), ","), State: summary.State, Status: summary.Status, }) } return containers, nil }