a17b9c542b
When attaching to a container, hijack puts the terminal in raw mode, and local echo is disabled. In normal cases, the terminal is restored once the container detaches; https://github.com/docker/cli/blob/6f856263c2f03a8dc19cef3d6cb48d56a3fab5cc/cli/command/container/hijack.go#L40-L44 However, when the CLI is forced to exit (after 3 signals), we `os.Exit(1)`, which causes defers to not be executed, and because of this, the terminal not being restored. For example; start a container that's attached; docker run -it --rm --sig-proxy=false alpine sleep 20 In another terminal send a SIGINT 3 times to force terminate; kill -sINT $(pgrep -af docker\ run) kill -sINT $(pgrep -af docker\ run) kill -sINT $(pgrep -af docker\ run) The first terminal shows that the docker cli was terminated; got 3 SIGTERM/SIGINTs, forcefully exiting However, the terminal was not restored, so local echo is disabled, and typing any command in the terminal does not show output (a manual `stty echo` is needed to restore). With this patch, the terminal is restored before we forcefully exit the docker CLI. Restoring is a no-op if there's no previous state, so we can unconditionally execute this. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>