diff --git a/daemon/create.go b/daemon/create.go index d8addd3a99..c9dfa8e4d8 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -114,9 +114,6 @@ func (daemon *Daemon) GenerateSecurityOpt(ipcMode runconfig.IpcMode, pidMode run if err != nil { return nil, err } - if !c.IsRunning() { - return nil, fmt.Errorf("cannot join IPC of a non running container: %s", ipcContainer) - } return label.DupSecOpt(c.ProcessLabel), nil } diff --git a/integration-cli/docker_cli_create_test.go b/integration-cli/docker_cli_create_test.go index 14d320d851..019ea97fc6 100644 --- a/integration-cli/docker_cli_create_test.go +++ b/integration-cli/docker_cli_create_test.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "fmt" "os" "os/exec" "reflect" @@ -323,3 +324,20 @@ func (s *DockerSuite) TestCreateRM(c *check.C) { c.Fatalf("Failed to rm -f container:%s\n%s", out, err) } } + +func (s *DockerSuite) TestCreateModeIpcContainer(c *check.C) { + testRequires(c, SameHostDaemon) + + cmd := exec.Command(dockerBinary, "create", "busybox") + out, _, err := runCommandWithOutput(cmd) + if err != nil { + c.Fatal(err, out) + } + id := strings.TrimSpace(out) + + cmd = exec.Command(dockerBinary, "create", fmt.Sprintf("--ipc=container:%s", id), "busybox") + out, _, err = runCommandWithOutput(cmd) + if err != nil { + c.Fatalf("Create container with ipc mode container should success with non running container: %s\n%s", out, err) + } +} diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index 0b067b9785..5a68ba234f 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -2659,6 +2659,23 @@ func (s *DockerSuite) TestRunModeIpcContainerNotExists(c *check.C) { } } +func (s *DockerSuite) TestRunModeIpcContainerNotRunning(c *check.C) { + testRequires(c, SameHostDaemon) + + cmd := exec.Command(dockerBinary, "create", "busybox") + out, _, err := runCommandWithOutput(cmd) + if err != nil { + c.Fatal(err, out) + } + id := strings.TrimSpace(out) + + cmd = exec.Command(dockerBinary, "run", fmt.Sprintf("--ipc=container:%s", id), "busybox") + out, _, err = runCommandWithOutput(cmd) + if err == nil { + c.Fatalf("Run container with ipc mode container should fail with non running container: %s\n%s", out, err) + } +} + func (s *DockerSuite) TestContainerNetworkMode(c *check.C) { testRequires(c, SameHostDaemon)