From e814936915d28286fa88f1211bc354687a358a7c Mon Sep 17 00:00:00 2001
From: baude <bbaude@redhat.com>
Date: Wed, 14 Feb 2018 15:25:06 -0600
Subject: [PATCH] No entrpoint, cmd, or command

When an image does not have an ENTRYPOINT nor a CMD and the
user does not provide a command in the CLI, we should fail
gracefully.

This resolves issue #328

Signed-off-by: baude <bbaude@redhat.com>

Closes: #333
Approved by: mheon
---
 cmd/podman/create.go            |  4 ++++
 test/e2e/run_entrypoint_test.go | 11 +++++++++++
 2 files changed, 15 insertions(+)

diff --git a/cmd/podman/create.go b/cmd/podman/create.go
index 2012aa6de0..5e2ea39691 100644
--- a/cmd/podman/create.go
+++ b/cmd/podman/create.go
@@ -587,6 +587,10 @@ func parseCreateOpts(c *cli.Context, runtime *libpod.Runtime, imageName string,
 		command = append(command, data.ContainerConfig.Cmd...)
 	}
 
+	if len(command) == 0 {
+		return nil, errors.Errorf("No command specified on command line or as CMD or ENTRYPOINT in this image")
+	}
+
 	// EXPOSED PORTS
 	portBindings, err := exposedPorts(c, data.ContainerConfig.ExposedPorts)
 	if err != nil {
diff --git a/test/e2e/run_entrypoint_test.go b/test/e2e/run_entrypoint_test.go
index 2ae2829679..e06f8bb3a9 100644
--- a/test/e2e/run_entrypoint_test.go
+++ b/test/e2e/run_entrypoint_test.go
@@ -28,6 +28,17 @@ var _ = Describe("Podman run entrypoint", func() {
 
 	})
 
+	It("podman run no command, entrypoint, or cmd", func() {
+		dockerfile := `FROM docker.io/library/alpine:latest
+ENTRYPOINT []
+CMD []
+`
+		podmanTest.BuildImage(dockerfile, "foobar.com/entrypoint:latest")
+		session := podmanTest.Podman([]string{"run", "foobar.com/entrypoint:latest"})
+		session.WaitWithDefaultTimeout()
+		Expect(session.ExitCode()).To(Equal(125))
+	})
+
 	It("podman run entrypoint", func() {
 		dockerfile := `FROM docker.io/library/alpine:latest
 ENTRYPOINT ["grep", "Alpine", "/etc/os-release"]