diff --git a/cio/io.go b/cio/io.go index f85ec174d..21a8b2d95 100644 --- a/cio/io.go +++ b/cio/io.go @@ -241,6 +241,20 @@ func LogURI(uri *url.URL) Creator { } } +// TerminalLogURI provides the raw logging URI +// as well as sets the terminal option to true. +func TerminalLogURI(uri *url.URL) Creator { + return func(_ string) (IO, error) { + return &logURI{ + config: Config{ + Stdout: uri.String(), + Stderr: uri.String(), + Terminal: true, + }, + }, nil + } +} + // BinaryIO forwards container STDOUT|STDERR directly to a logging binary func BinaryIO(binary string, args map[string]string) Creator { return func(_ string) (IO, error) { diff --git a/runtime/restart/monitor/change.go b/runtime/restart/monitor/change.go index 4d07359b5..55c55bb63 100644 --- a/runtime/restart/monitor/change.go +++ b/runtime/restart/monitor/change.go @@ -44,13 +44,21 @@ type startChange struct { func (s *startChange) apply(ctx context.Context, client *containerd.Client) error { log := cio.NullIO - + spec, err := s.container.Spec(ctx) + if err != nil { + return err + } + useTTY := spec.Process.Terminal if s.logURI != "" { uri, err := url.Parse(s.logURI) if err != nil { return fmt.Errorf("failed to parse %v into url: %w", s.logURI, err) } - log = cio.LogURI(uri) + if useTTY { + log = cio.TerminalLogURI(uri) + } else { + log = cio.LogURI(uri) + } } if s.count > 0 {