summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/podman/create.go17
-rw-r--r--cmd/podman/ps.go21
-rw-r--r--libpod/container_inspect.go3
-rw-r--r--test/podman_networking.bats9
4 files changed, 37 insertions, 13 deletions
diff --git a/cmd/podman/create.go b/cmd/podman/create.go
index 28bd0a60e..80cb7f432 100644
--- a/cmd/podman/create.go
+++ b/cmd/podman/create.go
@@ -299,15 +299,26 @@ func isPortInPortBindings(pb map[nat.Port][]nat.PortBinding, port nat.Port) bool
}
func exposedPorts(c *cli.Context, imageExposedPorts map[string]struct{}) (map[nat.Port]struct{}, map[nat.Port][]nat.PortBinding, error) {
- // TODO Handle exposed ports from image
- // Currently ignoring imageExposedPorts
+ var exposedPorts []string
var ports map[nat.Port]struct{}
ports = make(map[nat.Port]struct{})
_, portBindings, err := nat.ParsePortSpecs(c.StringSlice("publish"))
if err != nil {
return nil, nil, err
}
- for _, e := range c.StringSlice("expose") {
+
+ // Parse the ports from the image itself
+ for i := range imageExposedPorts {
+ fields := strings.Split(i, "/")
+ if len(fields) > 2 {
+ return nil, nil, errors.Errorf("invalid exposed port format in image")
+ }
+ exposedPorts = append(exposedPorts, fields[0])
+ }
+
+ // Add the ports from the image to the ports from the user
+ exposedPorts = append(exposedPorts, c.StringSlice("expose")...)
+ for _, e := range exposedPorts {
// Merge in exposed ports to the map of published ports
if strings.Contains(e, ":") {
return nil, nil, fmt.Errorf("invalid port format for --expose: %s", e)
diff --git a/cmd/podman/ps.go b/cmd/podman/ps.go
index 944664c68..d68abeb53 100644
--- a/cmd/podman/ps.go
+++ b/cmd/podman/ps.go
@@ -10,6 +10,7 @@ import (
"strings"
"time"
+ "github.com/cri-o/ocicni/pkg/ocicni"
"github.com/docker/go-units"
specs "github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors"
@@ -400,7 +401,7 @@ func getTemplateOutput(containers []*libpod.Container, opts psOptions) ([]psTemp
//command := getStrFromSquareBrackets(ctr.ImageCreatedBy)
command := strings.Join(ctr.Spec().Process.Args, " ")
//mounts := getMounts(ctr.Mounts, opts.noTrunc)
- //ports := getPorts(ctr.Config.ExposedPorts)
+ ports := getPorts(ctr.Config().PortMappings)
//size := units.HumanSize(float64(ctr.SizeRootFs))
labels := formatLabels(ctr.Labels())
ns := getNamespaces(pid)
@@ -433,7 +434,7 @@ func getTemplateOutput(containers []*libpod.Container, opts psOptions) ([]psTemp
CreatedAt: createdAt,
RunningFor: runningFor,
Status: status,
- //Ports: ports,
+ Ports: ports,
//Size: size,
Names: ctr.Name(),
Labels: labels,
@@ -592,15 +593,19 @@ func getMounts(mounts []specs.Mount, noTrunc bool) string {
}
return strings.Join(arr, ",")
}
+*/
// getPorts converts the ports used to a string of the from "port1, port2"
-func getPorts(ports map[string]struct{}) string {
- var arr []string
+func getPorts(ports []ocicni.PortMapping) string {
+ var portDisplay []string
if len(ports) == 0 {
return ""
}
- for key := range ports {
- arr = append(arr, key)
+ for _, v := range ports {
+ hostIP := v.HostIP
+ if hostIP == "" {
+ hostIP = "0.0.0.0"
+ }
+ portDisplay = append(portDisplay, fmt.Sprintf("%s:%d->%d/%s", hostIP, v.HostPort, v.ContainerPort, v.Protocol))
}
- return strings.Join(arr, ",")
+ return strings.Join(portDisplay, ", ")
}
-*/
diff --git a/libpod/container_inspect.go b/libpod/container_inspect.go
index 0bb45cedd..78dd00c16 100644
--- a/libpod/container_inspect.go
+++ b/libpod/container_inspect.go
@@ -4,7 +4,6 @@ import (
"github.com/cri-o/ocicni/pkg/ocicni"
"github.com/projectatomic/libpod/libpod/driver"
"github.com/sirupsen/logrus"
- "github.com/ulule/deepcopier"
)
func (c *Container) getContainerInspectData(size bool, driverData *driver.Data) (*ContainerInspectData, error) {
@@ -77,7 +76,7 @@ func (c *Container) getContainerInspectData(size bool, driverData *driver.Data)
// Copy port mappings into network settings
if config.PortMappings != nil {
- deepcopier.Copy(config.PortMappings).To(data.NetworkSettings.Ports)
+ data.NetworkSettings.Ports = config.PortMappings
}
// Get information on the container's network namespace (if present)
diff --git a/test/podman_networking.bats b/test/podman_networking.bats
index b2196b4bc..b27c16634 100644
--- a/test/podman_networking.bats
+++ b/test/podman_networking.bats
@@ -48,3 +48,12 @@ function setup() {
echo "$output"
[ "$status" -eq 0 ]
}
+
+@test "expose ports in image" {
+ run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -dt -P docker.io/library/nginx:latest
+ echo "$output"
+ [ "$status" -eq 0 ]
+ run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} inspect -l | grep ': 80,'"
+ echo "$output"
+ [ "$status" -eq 0 ]
+}