diff --git a/docker/docker.go b/docker/docker.go index a267120f..b70f5a76 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -266,6 +266,37 @@ func (daemon *DockerDaemon) Ok() (bool, error) { return daemon.err == nil, daemon.err } +//Prune requests the Docker daemon to prune unused containers, images +//networks and volumes +func (daemon *DockerDaemon) Prune() (*PrunerReport, error) { + c := context.Background() + + args := filters.Args{} + args.Add("all", "y") + cReport, err := daemon.client.ContainersPrune(c, args) + if err != nil { + return nil, err + } + iReport, err := daemon.client.ImagesPrune(c, args) + if err != nil { + return nil, err + } + nReport, err := daemon.client.NetworksPrune(c, args) + if err != nil { + return nil, err + } + vRreport, err := daemon.client.VolumesPrune(c, args) + if err != nil { + return nil, err + } + return &PrunerReport{ + ContainerReport: cReport, + ImagesReport: iReport, + NetworksReport: nReport, + VolumesReport: vRreport}, nil + +} + //RestartContainer restarts the container with the given id func (daemon *DockerDaemon) RestartContainer(id string) error { //TODO use cancel function diff --git a/docker/types.go b/docker/types.go index 0583e5f8..dd4b6eda 100644 --- a/docker/types.go +++ b/docker/types.go @@ -62,3 +62,11 @@ type Stats struct { Stats *types.StatsJSON ProcessList *types.ContainerProcessList } + +//PrunerReport represents the result of a prune operation +type PrunerReport struct { + ContainerReport types.ContainersPruneReport + ImagesReport types.ImagesPruneReport + NetworksReport types.NetworksPruneReport + VolumesReport types.VolumesPruneReport +}