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 <ripcurld.github@gmail.com>
This commit is contained in:
Boaz Shuster 2016-10-31 14:12:10 +02:00
parent faac177285
commit fdbf29e1fa
1 changed files with 8 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package image package image
import ( import (
"fmt"
"io" "io"
"os" "os"
@ -49,6 +50,13 @@ func runLoad(dockerCli *command.DockerCli, opts loadOptions) error {
defer file.Close() defer file.Close()
input = file 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() { if !dockerCli.Out().IsTerminal() {
opts.quiet = true opts.quiet = true
} }