diff options
author | Peter Hunt <pehunt@redhat.com> | 2020-01-08 11:09:07 -0500 |
---|---|---|
committer | Peter Hunt <pehunt@redhat.com> | 2020-01-08 11:09:08 -0500 |
commit | 776eb64ab2cc07e0bd2879791780fa9b9fcd7ea1 (patch) | |
tree | b8ffd4cf94c315f8efc33d0d4e8037c2bf4b81ce /libpod/oci_conmon_linux.go | |
parent | bd3d8f4e282dc7a552d955bf5958b53d23937604 (diff) | |
download | podman-776eb64ab2cc07e0bd2879791780fa9b9fcd7ea1.tar.gz podman-776eb64ab2cc07e0bd2879791780fa9b9fcd7ea1.tar.bz2 podman-776eb64ab2cc07e0bd2879791780fa9b9fcd7ea1.zip |
exec: fix pipes
In a largely anticlimatic solution to the saga of piped input from conmon, we come to this solution.
When we pass the Stdin stream to the exec.Command structure, it's immediately consumed and lost, instead of being consumed through CopyDetachable().
When we don't pass -i in, conmon is not told to create a masterfd_stdin, and won't pass anything to the container.
With both, we can do
echo hi | podman exec -til cat
and get the expected hi
Signed-off-by: Peter Hunt <pehunt@redhat.com>
Diffstat (limited to 'libpod/oci_conmon_linux.go')
-rw-r--r-- | libpod/oci_conmon_linux.go | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/libpod/oci_conmon_linux.go b/libpod/oci_conmon_linux.go index 37aa71cbb..78c8f4126 100644 --- a/libpod/oci_conmon_linux.go +++ b/libpod/oci_conmon_linux.go @@ -546,6 +546,10 @@ func (r *ConmonOCIRuntime) ExecContainer(c *Container, sessionID string, options args = append(args, "-t") } + if options.Streams.AttachInput { + args = append(args, "-i") + } + // Append container ID and command args = append(args, "-e") // TODO make this optional when we can detach @@ -558,9 +562,8 @@ func (r *ConmonOCIRuntime) ExecContainer(c *Container, sessionID string, options execCmd := exec.Command(r.conmonPath, args...) if options.Streams != nil { - if options.Streams.AttachInput { - execCmd.Stdin = options.Streams.InputStream - } + // Don't add the InputStream to the execCmd. Instead, the data should be passed + // through CopyDetachable if options.Streams.AttachOutput { execCmd.Stdout = options.Streams.OutputStream } |