From fdbf29e1fa69decd3676d225fee2879ea9b5e61a Mon Sep 17 00:00:00 2001 From: Boaz Shuster Date: Mon, 31 Oct 2016 14:12:10 +0200 Subject: [PATCH] Validate docker-load receives a tar file To load an image from a tar file, you can specify the tar file in the -i/--input option: docker load -i image_1.tar or using stdin: docker load < image_1.tar cat image_1.tat | docker load If the image file isn't given the `docker load` command gets stuck. To avoid that, the load makes sure the CLI input is not a terminal or the `--input` option was set. If not then an error message is shown. Signed-off-by: Boaz Shuster --- command/image/load.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/command/image/load.go b/command/image/load.go index 56145a8a34..4f88faf094 100644 --- a/command/image/load.go +++ b/command/image/load.go @@ -1,6 +1,7 @@ package image import ( + "fmt" "io" "os" @@ -49,6 +50,13 @@ func runLoad(dockerCli *command.DockerCli, opts loadOptions) error { defer file.Close() input = file } + + // To avoid getting stuck, verify that a tar file is given either in + // the input flag or through stdin and if not display an error message and exit. + if opts.input == "" && dockerCli.In().IsTerminal() { + return fmt.Errorf("requested load from stdin, but stdin is empty") + } + if !dockerCli.Out().IsTerminal() { opts.quiet = true }