diff --git a/builder/builder.go b/builder/builder.go index a8c8d58d1..45f964daf 100644 --- a/builder/builder.go +++ b/builder/builder.go @@ -71,7 +71,7 @@ type buildFile struct { outOld io.Writer sf *utils.StreamFormatter - // cmdSet indicates is CMD was setted in current Dockerfile + // cmdSet indicates is CMD was set in current Dockerfile cmdSet bool } @@ -202,7 +202,8 @@ func (b *buildFile) CmdRun(args string) error { } cmd := b.config.Cmd - b.config.Cmd = nil + // set Cmd manually, this is special case only for Dockerfiles + b.config.Cmd = config.Cmd runconfig.Merge(b.config, config) defer func(cmd []string) { b.config.Cmd = cmd }(cmd) diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index d02ebb54e..2cfef2acb 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -1454,3 +1454,29 @@ func TestCopyVolumeContent(t *testing.T) { t.Fatal("Container failed to transfer content to volume") } } + +func TestRunCleanupCmdOnEntrypoint(t *testing.T) { + name := "testrunmdcleanuponentrypoint" + defer deleteImages(name) + defer deleteAllContainers() + if _, err := buildImage(name, + `FROM busybox + ENTRYPOINT ["echo"] + CMD ["testingpoint"]`, + true); err != nil { + t.Fatal(err) + } + runCmd := exec.Command(dockerBinary, "run", "--entrypoint", "whoami", name) + out, exit, err := runCommandWithOutput(runCmd) + if err != nil { + t.Fatalf("Error: %v, out: %q", err, out) + } + if exit != 0 { + t.Fatalf("expected exit code 0 received %d, out: %q", exit, out) + } + out = strings.TrimSpace(out) + if out != "root" { + t.Fatalf("Expected output root, got %q", out) + } + logDone("run - cleanup cmd on --entrypoint") +} diff --git a/runconfig/merge.go b/runconfig/merge.go index 1c81d25ba..8b1428ed3 100644 --- a/runconfig/merge.go +++ b/runconfig/merge.go @@ -84,10 +84,10 @@ func Merge(userConf, imageConf *Config) error { } } - if len(userConf.Cmd) == 0 { - userConf.Cmd = imageConf.Cmd - } if len(userConf.Entrypoint) == 0 { + if len(userConf.Cmd) == 0 { + userConf.Cmd = imageConf.Cmd + } userConf.Entrypoint = imageConf.Entrypoint } if userConf.WorkingDir == "" {