github.com/circular-dark/docker@v1.7.0/daemon/attach.go (about)

     1  package daemon
     2  
     3  import (
     4  	"io"
     5  
     6  	"github.com/docker/docker/pkg/stdcopy"
     7  )
     8  
     9  type ContainerAttachWithLogsConfig struct {
    10  	InStream                       io.ReadCloser
    11  	OutStream                      io.Writer
    12  	UseStdin, UseStdout, UseStderr bool
    13  	Logs, Stream                   bool
    14  	Multiplex                      bool
    15  }
    16  
    17  func (daemon *Daemon) ContainerAttachWithLogs(name string, c *ContainerAttachWithLogsConfig) error {
    18  	container, err := daemon.Get(name)
    19  	if err != nil {
    20  		return err
    21  	}
    22  
    23  	var errStream io.Writer
    24  
    25  	if !container.Config.Tty && c.Multiplex {
    26  		errStream = stdcopy.NewStdWriter(c.OutStream, stdcopy.Stderr)
    27  		c.OutStream = stdcopy.NewStdWriter(c.OutStream, stdcopy.Stdout)
    28  	} else {
    29  		errStream = c.OutStream
    30  	}
    31  
    32  	var stdin io.ReadCloser
    33  	var stdout, stderr io.Writer
    34  
    35  	if c.UseStdin {
    36  		stdin = c.InStream
    37  	}
    38  	if c.UseStdout {
    39  		stdout = c.OutStream
    40  	}
    41  	if c.UseStderr {
    42  		stderr = errStream
    43  	}
    44  
    45  	return container.AttachWithLogs(stdin, stdout, stderr, c.Logs, c.Stream)
    46  }
    47  
    48  type ContainerWsAttachWithLogsConfig struct {
    49  	InStream             io.ReadCloser
    50  	OutStream, ErrStream io.Writer
    51  	Logs, Stream         bool
    52  }
    53  
    54  func (daemon *Daemon) ContainerWsAttachWithLogs(name string, c *ContainerWsAttachWithLogsConfig) error {
    55  	container, err := daemon.Get(name)
    56  	if err != nil {
    57  		return err
    58  	}
    59  
    60  	return container.AttachWithLogs(c.InStream, c.OutStream, c.ErrStream, c.Logs, c.Stream)
    61  }