summaryrefslogtreecommitdiff
path: root/cmd/podman/port.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/podman/port.go')
-rw-r--r--cmd/podman/port.go135
1 files changed, 0 insertions, 135 deletions
diff --git a/cmd/podman/port.go b/cmd/podman/port.go
deleted file mode 100644
index 4bb79a3a2..000000000
--- a/cmd/podman/port.go
+++ /dev/null
@@ -1,135 +0,0 @@
-package main
-
-import (
- "fmt"
- "strconv"
- "strings"
-
- "github.com/containers/libpod/cmd/podman/cliconfig"
- "github.com/containers/libpod/pkg/adapter"
- "github.com/docker/go-connections/nat"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- portCommand cliconfig.PortValues
- portDescription = `List port mappings for the CONTAINER, or lookup the public-facing port that is NAT-ed to the PRIVATE_PORT
-`
- _portCommand = &cobra.Command{
- Use: "port [flags] CONTAINER [PORT]",
- Short: "List port mappings or a specific mapping for the container",
- Long: portDescription,
- RunE: func(cmd *cobra.Command, args []string) error {
- portCommand.InputArgs = args
- portCommand.GlobalFlags = MainGlobalOpts
- portCommand.Remote = remoteclient
- return portCmd(&portCommand)
- },
- Args: func(cmd *cobra.Command, args []string) error {
- return checkAllLatestAndCIDFile(cmd, args, true, false)
- },
- Example: `podman port --all
- podman port ctrID 80/tcp
- podman port --latest 80`,
- }
-)
-
-func init() {
- portCommand.Command = _portCommand
- portCommand.SetHelpTemplate(HelpTemplate())
- portCommand.SetUsageTemplate(UsageTemplate())
- flags := portCommand.Flags()
-
- flags.BoolVarP(&portCommand.All, "all", "a", false, "Display port information for all containers")
- flags.BoolVarP(&portCommand.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
-
- markFlagHiddenForRemoteClient("latest", flags)
-}
-
-func portCmd(c *cliconfig.PortValues) error {
- var (
- userPort nat.Port
- err error
- )
- args := c.InputArgs
-
- if c.Latest && c.All {
- return errors.Errorf("the 'all' and 'latest' options cannot be used together")
- }
- if c.All && len(args) > 0 {
- return errors.Errorf("no additional arguments can be used with 'all'")
- }
- if len(args) == 0 && !c.Latest && !c.All {
- return errors.Errorf("you must supply a running container name or id")
- }
-
- port := ""
- if len(args) > 1 && !c.Latest {
- port = args[1]
- }
- if len(args) == 1 && c.Latest {
- port = args[0]
- }
- if len(port) > 0 {
- fields := strings.Split(port, "/")
- if len(fields) > 2 || len(fields) < 1 {
- return errors.Errorf("port formats are port/protocol. '%s' is invalid", port)
- }
- if len(fields) == 1 {
- fields = append(fields, "tcp")
- }
-
- userPort, err = nat.NewPort(fields[1], fields[0])
- if err != nil {
- return err
- }
- }
-
- runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand)
- if err != nil {
- return errors.Wrapf(err, "could not get runtime")
- }
- defer runtime.DeferredShutdown(false)
- containers, err := runtime.Port(c)
- if err != nil {
- return err
- }
- for _, con := range containers {
- portmappings, err := con.PortMappings()
- if err != nil {
- return err
- }
- var found bool
- // Iterate mappings
- for _, v := range portmappings {
- hostIP := v.HostIP
- // Set host IP to 0.0.0.0 if blank
- if hostIP == "" {
- hostIP = "0.0.0.0"
- }
- if c.All {
- fmt.Printf("%s\t", con.ID()[:12])
- }
- // If not searching by port or port/proto, then dump what we see
- if port == "" {
- fmt.Printf("%d/%s -> %s:%d\n", v.ContainerPort, v.Protocol, hostIP, v.HostPort)
- continue
- }
- containerPort, err := nat.NewPort(v.Protocol, strconv.Itoa(int(v.ContainerPort)))
- if err != nil {
- return err
- }
- if containerPort == userPort {
- fmt.Printf("%s:%d\n", hostIP, v.HostPort)
- found = true
- break
- }
- }
- if !found && port != "" {
- return errors.Errorf("failed to find published port %q", port)
- }
- }
-
- return nil
-}