diff --git a/pkg/server/io/container_io.go b/pkg/server/io/container_io.go index 7edf627c6..509e4993e 100644 --- a/pkg/server/io/container_io.go +++ b/pkg/server/io/container_io.go @@ -105,18 +105,20 @@ func (c *ContainerIO) Config() cio.Config { // to output stream. func (c *ContainerIO) Pipe() { wg := c.closer.wg - wg.Add(1) - go func() { - if _, err := io.Copy(c.stdoutGroup, c.stdout); err != nil { - logrus.WithError(err).Errorf("Failed to pipe stdout of container %q", c.id) - } - c.stdout.Close() - c.stdoutGroup.Close() - wg.Done() - logrus.Infof("Finish piping stdout of container %q", c.id) - }() + if c.stdout != nil { + wg.Add(1) + go func() { + if _, err := io.Copy(c.stdoutGroup, c.stdout); err != nil { + logrus.WithError(err).Errorf("Failed to pipe stdout of container %q", c.id) + } + c.stdout.Close() + c.stdoutGroup.Close() + wg.Done() + logrus.Infof("Finish piping stdout of container %q", c.id) + }() + } - if !c.fifos.Terminal { + if !c.fifos.Terminal && c.stderr != nil { wg.Add(1) go func() { if _, err := io.Copy(c.stderrGroup, c.stderr); err != nil { diff --git a/pkg/server/io/helpers.go b/pkg/server/io/helpers.go index e9a0016f6..6ca5931f2 100644 --- a/pkg/server/io/helpers.go +++ b/pkg/server/io/helpers.go @@ -120,17 +120,21 @@ func newStdioPipes(fifos *cio.FIFOSet) (_ *stdioPipes, _ *wgCloser, err error) { set = append(set, f) } - if f, err = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil { - return nil, nil, err + if fifos.Stdout != "" { + if f, err = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil { + return nil, nil, err + } + p.stdout = f + set = append(set, f) } - p.stdout = f - set = append(set, f) - if f, err = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil { - return nil, nil, err + if fifos.Stderr != "" { + if f, err = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil { + return nil, nil, err + } + p.stderr = f + set = append(set, f) } - p.stderr = f - set = append(set, f) return p, &wgCloser{ wg: &sync.WaitGroup{},