diff --git a/api/client/image/build.go b/api/client/image/build.go index 8cc0736446..e3d3f034fc 100644 --- a/api/client/image/build.go +++ b/api/client/image/build.go @@ -104,6 +104,22 @@ func NewBuildCommand(dockerCli *client.DockerCli) *cobra.Command { return cmd } +// lastProgressOutput is the same as progress.Output except +// that it only output with the last update. It is used in +// non terminal scenarios to depresss verbose messages +type lastProgressOutput struct { + output progress.Output +} + +// WriteProgress formats progress information from a ProgressReader. +func (out *lastProgressOutput) WriteProgress(prog progress.Progress) error { + if !prog.LastUpdate { + return nil + } + + return out.output.WriteProgress(prog) +} + func runBuild(dockerCli *client.DockerCli, options buildOptions) error { var ( @@ -211,6 +227,9 @@ func runBuild(dockerCli *client.DockerCli, options buildOptions) error { // Setup an upload progress bar progressOutput := streamformatter.NewStreamFormatter().NewProgressOutput(progBuff, true) + if !dockerCli.IsTerminalOut() { + progressOutput = &lastProgressOutput{output: progressOutput} + } var body io.Reader = progress.NewProgressReader(buildCtx, progressOutput, 0, "", "Sending build context to Docker daemon")