Bug fix: docker run -i --restart always hangs.
e.g. ``` $ docker run -i --restart always busybox sh pwd / exit 11 <...hang...> ``` This is because Attach(daemon side) and Run(client side) both hangs on WaitStop, if container is restarted too quickly, wait won't have chance to get exit signal. Signed-off-by: Zhang Wei <zhangwei555@huawei.com> Upstream-commit: c498d4700df8216ccefd6d2f03b5ebe6d6e9fd47 Component: engine
This commit is contained in:
@ -1828,6 +1828,37 @@ func (s *DockerSuite) TestRunExitOnStdinClose(c *check.C) {
|
||||
}
|
||||
}
|
||||
|
||||
// Test run -i --restart xxx doesn't hang
|
||||
func (s *DockerSuite) TestRunInteractiveWithRestartPolicy(c *check.C) {
|
||||
name := "test-inter-restart"
|
||||
runCmd := exec.Command(dockerBinary, "run", "-i", "--name", name, "--restart=always", "busybox", "sh")
|
||||
|
||||
stdin, err := runCmd.StdinPipe()
|
||||
c.Assert(err, checker.IsNil)
|
||||
|
||||
err = runCmd.Start()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(waitRun(name), check.IsNil)
|
||||
|
||||
_, err = stdin.Write([]byte("exit 11\n"))
|
||||
c.Assert(err, checker.IsNil)
|
||||
|
||||
finish := make(chan error)
|
||||
go func() {
|
||||
finish <- runCmd.Wait()
|
||||
close(finish)
|
||||
}()
|
||||
delay := 10 * time.Second
|
||||
select {
|
||||
case <-finish:
|
||||
case <-time.After(delay):
|
||||
c.Fatal("run -i --restart hangs")
|
||||
}
|
||||
|
||||
c.Assert(waitRun(name), check.IsNil)
|
||||
dockerCmd(c, "stop", name)
|
||||
}
|
||||
|
||||
// Test for #2267
|
||||
func (s *DockerSuite) TestRunWriteHostsFileAndNotCommit(c *check.C) {
|
||||
// Cannot run on Windows as Windows does not support diff.
|
||||
|
||||
Reference in New Issue
Block a user