Merge pull request #7629 from LK4D4/fix_follow_hang_on_stop

Fix logs -f hanging on stopped containers
This commit is contained in:
Michael Crosby 2014-08-25 15:24:20 -07:00
commit 228eda4fd5
2 changed files with 33 additions and 1 deletions

View file

@ -111,7 +111,7 @@ func (daemon *Daemon) ContainerLogs(job *engine.Job) engine.Status {
}
}
}
if follow {
if follow && container.State.IsRunning() {
errors := make(chan error, 2)
if stdout {
stdoutPipe := container.StdoutLogPipe()

View file

@ -213,3 +213,35 @@ func TestLogsTail(t *testing.T) {
deleteContainer(cleanedContainerID)
logDone("logs - logs tail")
}
func TestLogsFollowStopped(t *testing.T) {
runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "echo", "hello")
out, _, _, err := runCommandWithStdoutStderr(runCmd)
errorOut(err, t, fmt.Sprintf("run failed with errors: %v", err))
cleanedContainerID := stripTrailingCharacters(out)
exec.Command(dockerBinary, "wait", cleanedContainerID).Run()
logsCmd := exec.Command(dockerBinary, "logs", "-f", cleanedContainerID)
if err := logsCmd.Start(); err != nil {
t.Fatal(err)
}
c := make(chan struct{})
go func() {
if err := logsCmd.Wait(); err != nil {
t.Fatal(err)
}
close(c)
}()
select {
case <-c:
case <-time.After(1 * time.Second):
t.Fatal("Following logs is hanged")
}
deleteContainer(cleanedContainerID)
logDone("logs - logs follow stopped container")
}