diff options
author | Daniel J Walsh <dwalsh@redhat.com> | 2018-08-27 11:22:28 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-08-28 14:29:12 +0000 |
commit | 1a90b2fd363bec5f9b57c1cd829ceb5890270f8c (patch) | |
tree | 7a043c8e78f02dc7ca5946a6670e1045c2e6c9f9 | |
parent | 9e315518aa52c8cb80b2fae3bd48f6e52e6d0fc0 (diff) | |
download | podman-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.go | 2 | ||||
-rw-r--r-- | cmd/podman/create.go | 31 | ||||
-rw-r--r-- | docs/podman-create.1.md | 4 | ||||
-rw-r--r-- | docs/podman-run.1.md | 4 | ||||
-rw-r--r-- | test/e2e/create_test.go | 37 |
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")) + }) }) |