summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hunt <pehunt@redhat.com>2020-01-08 11:09:07 -0500
committerPeter Hunt <pehunt@redhat.com>2020-01-08 11:09:08 -0500
commit776eb64ab2cc07e0bd2879791780fa9b9fcd7ea1 (patch)
treeb8ffd4cf94c315f8efc33d0d4e8037c2bf4b81ce
parentbd3d8f4e282dc7a552d955bf5958b53d23937604 (diff)
downloadpodman-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>
-rw-r--r--libpod/oci_conmon_linux.go9
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
}