package docker import ( "context" "io" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/network" "github.com/docker/docker/client" oci "github.com/opencontainers/image-spec/specs-go/v1" ) func newCli() (*client.Client, error) { return client.NewClientWithOpts(client.FromEnv) } func Ps() ([]types.Container, error) { cli, err := newCli() if err != nil { return nil, err } containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{}) if err != nil { return nil, err } return containers, nil } func Run(image string) (string, error) { cli, err := newCli() if err != nil { return "", err } ctnr, err := cli.ContainerCreate( context.Background(), &container.Config{ AttachStdout: true, AttachStderr: true, Image: image, }, &container.HostConfig{}, &network.NetworkingConfig{}, &oci.Platform{ Architecture: "amd64", OS: "linux", }, "", ) if err != nil { return "", err } err = cli.ContainerStart(context.Background(), ctnr.ID, types.ContainerStartOptions{}) if err != nil { return "", err } return ctnr.ID, nil } func Logs(id string) (io.ReadCloser, error) { cli, err := newCli() if err != nil { return nil, err } return cli.ContainerLogs(context.Background(), id, types.ContainerLogsOptions{ ShowStdout: true, ShowStderr: true, Follow: true, }) }