aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2018-08-27 11:22:28 -0400
committerAtomic Bot <atomic-devel@projectatomic.io>2018-08-28 14:29:12 +0000
commit1a90b2fd363bec5f9b57c1cd829ceb5890270f8c (patch)
tree7a043c8e78f02dc7ca5946a6670e1045c2e6c9f9
parent9e315518aa52c8cb80b2fae3bd48f6e52e6d0fc0 (diff)
downloadpodman-1a90b2fd363bec5f9b57c1cd829ceb5890270f8c.tar.gz
podman-1a90b2fd363bec5f9b57c1cd829ceb5890270f8c.tar.bz2
podman-1a90b2fd363bec5f9b57c1cd829ceb5890270f8c.zip
allow specification of entrypoint in the form of a slice
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com> Closes: #1352 Approved by: mheon
-rw-r--r--cmd/podman/common.go2
-rw-r--r--cmd/podman/create.go31
-rw-r--r--docs/podman-create.1.md4
-rw-r--r--docs/podman-run.1.md4
-rw-r--r--test/e2e/create_test.go37
5 files changed, 65 insertions, 13 deletions
diff --git a/cmd/podman/common.go b/cmd/podman/common.go
index 8ce3066c0..d9216850f 100644
--- a/cmd/podman/common.go
+++ b/cmd/podman/common.go
@@ -191,7 +191,7 @@ var createFlags = []cli.Flag{
Name: "dns-search",
Usage: "Set custom DNS search domains",
},
- cli.StringSliceFlag{
+ cli.StringFlag{
Name: "entrypoint",
Usage: "Overwrite the default ENTRYPOINT of the image",
},
diff --git a/cmd/podman/create.go b/cmd/podman/create.go
index 95b7a8bed..78b206543 100644
--- a/cmd/podman/create.go
+++ b/cmd/podman/create.go
@@ -316,6 +316,26 @@ func isPortInImagePorts(exposedPorts map[string]struct{}, port string) bool {
return false
}
+func configureEntrypoint(c *cli.Context, data *inspect.ImageData) []string {
+ entrypoint := []string{}
+ if c.IsSet("entrypoint") {
+ // Force entrypoint to ""
+ if c.String("entrypoint") == "" {
+ return entrypoint
+ }
+ // Check if entrypoint specified is json
+ if err := json.Unmarshal([]byte(c.String("entrypoint")), &entrypoint); err == nil {
+ return entrypoint
+ }
+ // Return entrypoint as a single command
+ return []string{c.String("entrypoint")}
+ }
+ if data != nil {
+ return data.ContainerConfig.Entrypoint
+ }
+ return entrypoint
+}
+
// Parses CLI options related to container creation into a config which can be
// parsed into an OCI runtime spec
func parseCreateOpts(ctx context.Context, c *cli.Context, runtime *libpod.Runtime, imageName string, data *inspect.ImageData) (*cc.CreateConfig, error) {
@@ -555,16 +575,7 @@ func parseCreateOpts(ctx context.Context, c *cli.Context, runtime *libpod.Runtim
workDir = data.ContainerConfig.WorkingDir
}
- // ENTRYPOINT
- // User input entrypoint takes priority over image entrypoint
- entrypoint := c.StringSlice("entrypoint")
- if len(entrypoint) == 0 && data != nil {
- entrypoint = data.ContainerConfig.Entrypoint
- }
- // if entrypoint=, we need to clear the entrypoint
- if len(entrypoint) == 1 && c.IsSet("entrypoint") && strings.Join(c.StringSlice("entrypoint"), "") == "" {
- entrypoint = []string{}
- }
+ entrypoint := configureEntrypoint(c, data)
// Build the command
// If we have an entry point, it goes first
if len(entrypoint) > 0 {
diff --git a/docs/podman-create.1.md b/docs/podman-create.1.md
index b796717ae..b396fb6b5 100644
--- a/docs/podman-create.1.md
+++ b/docs/podman-create.1.md
@@ -213,7 +213,7 @@ Set custom DNS options
Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain)
-**--entrypoint**=""
+**--entrypoint** *"command"* | *'["command", "arg1", ...]'*
Overwrite the default ENTRYPOINT of the image
@@ -228,6 +228,8 @@ something else inside the container, so you can override the default ENTRYPOINT
at runtime by using a **--entrypoint** and a string to specify the new
ENTRYPOINT.
+You need to specify multi option commands in the form of a json string.
+
**-e**, **--env**=[]
Set environment variables
diff --git a/docs/podman-run.1.md b/docs/podman-run.1.md
index 8bd263f58..482ca1b32 100644
--- a/docs/podman-run.1.md
+++ b/docs/podman-run.1.md
@@ -217,7 +217,7 @@ Set custom DNS options
Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain)
-**--entrypoint**=""
+**--entrypoint** *"command"* | *'["command", "arg1", ...]'*
Overwrite the default ENTRYPOINT of the image
@@ -233,6 +233,8 @@ something else inside the container, so you can override the default ENTRYPOINT
at runtime by using a **--entrypoint** and a string to specify the new
ENTRYPOINT.
+You need to specify multi option commands in the form of a json string.
+
**-e**, **--env**=[]
Set environment variables
diff --git a/test/e2e/create_test.go b/test/e2e/create_test.go
index cdcf1e8c6..c36a8e31f 100644
--- a/test/e2e/create_test.go
+++ b/test/e2e/create_test.go
@@ -72,4 +72,41 @@ var _ = Describe("Podman create", func() {
Expect(ok).To(BeTrue())
Expect(value).To(Equal("WORLD"))
})
+
+ It("podman create --entrypoint command", func() {
+ session := podmanTest.Podman([]string{"create", "--entrypoint", "/bin/foobar", ALPINE})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainers()).To(Equal(1))
+
+ result := podmanTest.Podman([]string{"inspect", "-l", "--format", "{{.Config.Entrypoint}}"})
+ result.WaitWithDefaultTimeout()
+ Expect(result.ExitCode()).To(Equal(0))
+ Expect(result.OutputToString()).To(Equal("/bin/foobar"))
+ })
+
+ It("podman create --entrypoint \"\"", func() {
+ session := podmanTest.Podman([]string{"create", "--entrypoint", "", ALPINE, "ls"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainers()).To(Equal(1))
+
+ result := podmanTest.Podman([]string{"inspect", "-l", "--format", "{{.Config.Entrypoint}}"})
+ result.WaitWithDefaultTimeout()
+ Expect(result.ExitCode()).To(Equal(0))
+ Expect(result.OutputToString()).To(Equal(""))
+ })
+
+ It("podman create --entrypoint json", func() {
+ jsonString := `[ "/bin/foo", "-c"]`
+ session := podmanTest.Podman([]string{"create", "--entrypoint", jsonString, ALPINE})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainers()).To(Equal(1))
+
+ result := podmanTest.Podman([]string{"inspect", "-l", "--format", "{{.Config.Entrypoint}}"})
+ result.WaitWithDefaultTimeout()
+ Expect(result.ExitCode()).To(Equal(0))
+ Expect(result.OutputToString()).To(Equal("/bin/foo -c"))
+ })
})