mirror of
https://github.com/containers/podman.git
synced 2025-05-22 09:36:57 +08:00

Add a --cidfile flag to podman rm/stop to pass a container ID via a file. Podman run already provides the functionaly to store the ID in a specified file which we now complete with rm/stop. This allows for a better life-cycle management in systemd services. Note that --cdifile can be specified multiple times to rm/stop. Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
64 lines
2.1 KiB
Go
64 lines
2.1 KiB
Go
//+build !remoteclient
|
|
|
|
package main
|
|
|
|
import (
|
|
"github.com/containers/libpod/cmd/podman/cliconfig"
|
|
"github.com/containers/libpod/pkg/adapter"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
cleanupCommand cliconfig.CleanupValues
|
|
cleanupDescription = `
|
|
podman container cleanup
|
|
|
|
Cleans up mount points and network stacks on one or more containers from the host. The container name or ID can be used. This command is used internally when running containers, but can also be used if container cleanup has failed when a container exits.
|
|
`
|
|
_cleanupCommand = &cobra.Command{
|
|
Use: "cleanup [flags] CONTAINER [CONTAINER...]",
|
|
Short: "Cleanup network and mountpoints of one or more containers",
|
|
Long: cleanupDescription,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
cleanupCommand.InputArgs = args
|
|
cleanupCommand.GlobalFlags = MainGlobalOpts
|
|
cleanupCommand.Remote = remoteclient
|
|
return cleanupCmd(&cleanupCommand)
|
|
},
|
|
Args: func(cmd *cobra.Command, args []string) error {
|
|
return checkAllLatestAndCIDFile(cmd, args, false, false)
|
|
},
|
|
Example: `podman container cleanup --latest
|
|
podman container cleanup ctrID1 ctrID2 ctrID3
|
|
podman container cleanup --all`,
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
cleanupCommand.Command = _cleanupCommand
|
|
cleanupCommand.SetHelpTemplate(HelpTemplate())
|
|
cleanupCommand.SetUsageTemplate(UsageTemplate())
|
|
flags := cleanupCommand.Flags()
|
|
|
|
flags.BoolVarP(&cleanupCommand.All, "all", "a", false, "Cleans up all containers")
|
|
flags.BoolVarP(&cleanupCommand.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
|
|
flags.BoolVar(&cleanupCommand.Remove, "rm", false, "After cleanup, remove the container entirely")
|
|
markFlagHiddenForRemoteClient("latest", flags)
|
|
}
|
|
|
|
func cleanupCmd(c *cliconfig.CleanupValues) error {
|
|
runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "could not get runtime")
|
|
}
|
|
defer runtime.DeferredShutdown(false)
|
|
|
|
ok, failures, err := runtime.CleanupContainers(getContext(), c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return printCmdResults(ok, failures)
|
|
}
|