diff --git a/daemon/cluster/executor/container/adapter.go b/daemon/cluster/executor/container/adapter.go index 4de4227e38..884751126c 100644 --- a/daemon/cluster/executor/container/adapter.go +++ b/daemon/cluster/executor/container/adapter.go @@ -397,6 +397,12 @@ func (c *containerAdapter) deactivateServiceBinding() error { } func (c *containerAdapter) logs(ctx context.Context, options api.LogSubscriptionOptions) (io.ReadCloser, error) { + // we can't handle the peculiarities of a TTY-attached container yet + conf := c.container.config() + if conf != nil && conf.Tty { + return nil, errors.New("logs not supported on containers with a TTY attached") + } + reader, writer := io.Pipe() apiOptions := &backend.ContainerLogsConfig{ diff --git a/daemon/cluster/services.go b/daemon/cluster/services.go index ec5a58c02d..37b34765ca 100644 --- a/daemon/cluster/services.go +++ b/daemon/cluster/services.go @@ -262,6 +262,13 @@ func (c *Cluster) ServiceLogs(ctx context.Context, input string, config *backend c.mu.RUnlock() return err } + container := service.Spec.Task.GetContainer() + if container == nil { + return errors.New("service logs only supported for container tasks") + } + if container.TTY { + return errors.New("service logs not supported on tasks with a TTY attached") + } // set the streams we'll use stdStreams := []swarmapi.LogStream{}