| package daemon |
| |
| import ( |
| "io" |
| |
| "github.com/docker/docker/pkg/stdcopy" |
| ) |
| |
| type ContainerAttachWithLogsConfig struct { |
| InStream io.ReadCloser |
| OutStream io.Writer |
| UseStdin, UseStdout, UseStderr bool |
| Logs, Stream bool |
| Multiplex bool |
| } |
| |
| func (daemon *Daemon) ContainerAttachWithLogs(name string, c *ContainerAttachWithLogsConfig) error { |
| container, err := daemon.Get(name) |
| if err != nil { |
| return err |
| } |
| |
| var errStream io.Writer |
| |
| if !container.Config.Tty && c.Multiplex { |
| errStream = stdcopy.NewStdWriter(c.OutStream, stdcopy.Stderr) |
| c.OutStream = stdcopy.NewStdWriter(c.OutStream, stdcopy.Stdout) |
| } else { |
| errStream = c.OutStream |
| } |
| |
| var stdin io.ReadCloser |
| var stdout, stderr io.Writer |
| |
| if c.UseStdin { |
| stdin = c.InStream |
| } |
| if c.UseStdout { |
| stdout = c.OutStream |
| } |
| if c.UseStderr { |
| stderr = errStream |
| } |
| |
| return container.AttachWithLogs(stdin, stdout, stderr, c.Logs, c.Stream) |
| } |
| |
| type ContainerWsAttachWithLogsConfig struct { |
| InStream io.ReadCloser |
| OutStream, ErrStream io.Writer |
| Logs, Stream bool |
| } |
| |
| func (daemon *Daemon) ContainerWsAttachWithLogs(name string, c *ContainerWsAttachWithLogsConfig) error { |
| container, err := daemon.Get(name) |
| if err != nil { |
| return err |
| } |
| |
| return container.AttachWithLogs(c.InStream, c.OutStream, c.ErrStream, c.Logs, c.Stream) |
| } |