|
@@ -23,6 +23,7 @@ import (
|
|
"github.com/docker/docker/daemon/logger"
|
|
"github.com/docker/docker/daemon/logger"
|
|
"github.com/docker/docker/daemon/logger/jsonfilelog"
|
|
"github.com/docker/docker/daemon/logger/jsonfilelog"
|
|
"github.com/docker/docker/daemon/logger/local"
|
|
"github.com/docker/docker/daemon/logger/local"
|
|
|
|
+ "github.com/docker/docker/daemon/logger/loggerutils/cache"
|
|
"github.com/docker/docker/daemon/network"
|
|
"github.com/docker/docker/daemon/network"
|
|
"github.com/docker/docker/errdefs"
|
|
"github.com/docker/docker/errdefs"
|
|
"github.com/docker/docker/image"
|
|
"github.com/docker/docker/image"
|
|
@@ -104,8 +105,13 @@ type Container struct {
|
|
NoNewPrivileges bool
|
|
NoNewPrivileges bool
|
|
|
|
|
|
// Fields here are specific to Windows
|
|
// Fields here are specific to Windows
|
|
- NetworkSharedContainerID string `json:"-"`
|
|
|
|
- SharedEndpointList []string `json:"-"`
|
|
|
|
|
|
+ NetworkSharedContainerID string `json:"-"`
|
|
|
|
+ SharedEndpointList []string `json:"-"`
|
|
|
|
+ LocalLogCacheMeta localLogCacheMeta `json:",omitempty"`
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+type localLogCacheMeta struct {
|
|
|
|
+ HaveNotifyEnabled bool
|
|
}
|
|
}
|
|
|
|
|
|
// NewBaseContainer creates a new container with its
|
|
// NewBaseContainer creates a new container with its
|
|
@@ -415,6 +421,22 @@ func (container *Container) StartLogger() (logger.Logger, error) {
|
|
}
|
|
}
|
|
l = logger.NewRingLogger(l, info, bufferSize)
|
|
l = logger.NewRingLogger(l, info, bufferSize)
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if _, ok := l.(logger.LogReader); !ok {
|
|
|
|
+ logPath, err := container.GetRootResourcePath("container-cached.log")
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ info.LogPath = logPath
|
|
|
|
+
|
|
|
|
+ if !container.LocalLogCacheMeta.HaveNotifyEnabled {
|
|
|
|
+ logrus.WithField("container", container.ID).Info("Configured log driver does not support reads, enabling local file cache for container logs")
|
|
|
|
+ }
|
|
|
|
+ l, err = cache.WithLocalCache(l, info)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, errors.Wrap(err, "error setting up local container log cache")
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return l, nil
|
|
return l, nil
|
|
}
|
|
}
|
|
|
|
|