From d59c91a461827b853b09c0581c1dd5be0f69859f Mon Sep 17 00:00:00 2001 From: Stanislav Pavlovichev Date: Fri, 26 Oct 2018 17:08:33 +0300 Subject: [PATCH] Do not allow to close /dev/stdin --- connector/manager/docker.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/connector/manager/docker.go b/connector/manager/docker.go index 0f66298..7e32cc7 100644 --- a/connector/manager/docker.go +++ b/connector/manager/docker.go @@ -3,6 +3,7 @@ package manager import ( "fmt" api "github.com/fsouza/go-dockerclient" + "io" "os" ) @@ -18,6 +19,15 @@ func NewDocker(client *api.Client, id string) *Docker { } } +// Do not allow to close reader (i.e. /dev/stdin which docker client tries to close after command execution) +type noClosableReader struct { + wrappedReader io.Reader +} + +func (w *noClosableReader) Read(p []byte) (n int, err error) { + return w.wrappedReader.Read(p) +} + func (dc *Docker) Exec(cmd []string) error { execCmd, err := dc.client.CreateExec(api.CreateExecOptions{ AttachStdin: true, @@ -33,7 +43,7 @@ func (dc *Docker) Exec(cmd []string) error { } return dc.client.StartExec(execCmd.ID, api.StartExecOptions{ - InputStream: os.Stdin, + InputStream: &noClosableReader{os.Stdin}, OutputStream: os.Stdout, ErrorStream: os.Stderr, RawTerminal: true,