Skip to content

Commit

Permalink
Merge pull request moby#8990 from duglin/Issue8379a
Browse files Browse the repository at this point in the history
Make sure that if a container can't start we set the exitcode to non-zero value
  • Loading branch information
Jessie Frazelle committed Nov 6, 2014
2 parents ff911d5 + 69a5b82 commit a72f3c5
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
4 changes: 4 additions & 0 deletions daemon/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,10 @@ func (container *Container) Start() (err error) {
defer func() {
if err != nil {
container.setError(err)
// if no one else has set it, make sure we don't leave it at zero
if container.ExitCode == 0 {
container.ExitCode = 128
}
container.toDisk()
container.cleanup()
}
Expand Down
3 changes: 3 additions & 0 deletions daemon/monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ func (m *containerMonitor) Start() error {
// if we receive an internal error from the initial start of a container then lets
// return it instead of entering the restart loop
if m.container.RestartCount == 0 {
m.container.ExitCode = exitStatus
m.resetContainer(false)

return err
Expand All @@ -163,10 +164,12 @@ func (m *containerMonitor) Start() error {
// we need to check this before reentering the loop because the waitForNextRestart could have
// been terminated by a request from a user
if m.shouldStop {
m.container.ExitCode = exitStatus
return err
}
continue
}
m.container.ExitCode = exitStatus
m.container.LogEvent("die")
m.resetContainer(true)
return err
Expand Down
30 changes: 30 additions & 0 deletions integration-cli/docker_cli_run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2538,3 +2538,33 @@ func TestRunAllowPortRangeThroughExpose(t *testing.T) {
}
logDone("run - allow port range through --expose flag")
}

func TestRunUnknownCommand(t *testing.T) {
defer deleteAllContainers()
runCmd := exec.Command(dockerBinary, "create", "busybox", "/bin/nada")
cID, _, _, err := runCommandWithStdoutStderr(runCmd)
if err != nil {
t.Fatalf("Failed to create container: %v, output: %q", err, cID)
}
cID = strings.TrimSpace(cID)

runCmd = exec.Command(dockerBinary, "start", cID)
_, _, _, err = runCommandWithStdoutStderr(runCmd)
if err == nil {
t.Fatalf("Container should not have been able to start!")
}

runCmd = exec.Command(dockerBinary, "inspect", "--format={{.State.ExitCode}}", cID)
rc, _, _, err2 := runCommandWithStdoutStderr(runCmd)
rc = strings.TrimSpace(rc)

if err2 != nil {
t.Fatalf("Error getting status of container: %v", err2)
}

if rc != "-1" {
t.Fatalf("ExitCode(%v) was supposed to be -1", rc)
}

logDone("run - Unknown Command")
}

0 comments on commit a72f3c5

Please sign in to comment.