mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-09-19 06:07:50 +00:00
Also, you can now podman-remote run -it. There are some bugs that need to be ironed out but I would prefer to merge this so we can make both progress on start and exec as well as the bugs. * when doing podman-remote run -it foo /bin/bash, you have to press enter to get the prompt to display. with the localized podman, we had to teach it connect to the console first and then start the container so we did not miss anything. * when executing "exit" in the console, we get a hard lockup likely because nobody knows what to do. * custom detach keys are not supported * podman-remote run -it alpine ls does not currently work. only dropping to a shell works. Signed-off-by: baude <bbaude@redhat.com>
55 lines
2.2 KiB
Go
55 lines
2.2 KiB
Go
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 (
|
|
attachCommand cliconfig.AttachValues
|
|
attachDescription = "The podman attach command allows you to attach to a running container using the container's ID or name, either to view its ongoing output or to control it interactively."
|
|
_attachCommand = &cobra.Command{
|
|
Use: "attach [flags] CONTAINER",
|
|
Short: "Attach to a running container",
|
|
Long: attachDescription,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
attachCommand.InputArgs = args
|
|
attachCommand.GlobalFlags = MainGlobalOpts
|
|
return attachCmd(&attachCommand)
|
|
},
|
|
Example: `podman attach ctrID
|
|
podman attach 1234
|
|
podman attach --no-stdin foobar`,
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
attachCommand.Command = _attachCommand
|
|
attachCommand.SetHelpTemplate(HelpTemplate())
|
|
attachCommand.SetUsageTemplate(UsageTemplate())
|
|
flags := attachCommand.Flags()
|
|
flags.StringVar(&attachCommand.DetachKeys, "detach-keys", "", "Override the key sequence for detaching a container. Format is a single character [a-Z] or ctrl-<value> where <value> is one of: a-z, @, ^, [, , or _")
|
|
flags.BoolVar(&attachCommand.NoStdin, "no-stdin", false, "Do not attach STDIN. The default is false")
|
|
flags.BoolVar(&attachCommand.SigProxy, "sig-proxy", true, "Proxy received signals to the process")
|
|
flags.BoolVarP(&attachCommand.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
|
|
markFlagHiddenForRemoteClient("latest", flags)
|
|
// TODO allow for passing of a new deatch keys
|
|
markFlagHiddenForRemoteClient("detach-keys", flags)
|
|
}
|
|
|
|
func attachCmd(c *cliconfig.AttachValues) error {
|
|
if len(c.InputArgs) > 1 || (len(c.InputArgs) == 0 && !c.Latest) {
|
|
return errors.Errorf("attach requires the name or id of one running container or the latest flag")
|
|
}
|
|
if remoteclient && len(c.InputArgs) != 1 {
|
|
return errors.Errorf("attach requires the name or id of one running container")
|
|
}
|
|
runtime, err := adapter.GetRuntime(&c.PodmanCommand)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "error creating runtime")
|
|
}
|
|
defer runtime.Shutdown(false)
|
|
return runtime.Attach(getContext(), c)
|
|
}
|