diff --git a/components/engine/daemon/daemon_unix.go b/components/engine/daemon/daemon_unix.go index 3402f77790..9d8f48216f 100644 --- a/components/engine/daemon/daemon_unix.go +++ b/components/engine/daemon/daemon_unix.go @@ -37,6 +37,7 @@ import ( lntypes "github.com/docker/libnetwork/types" "github.com/golang/protobuf/ptypes" "github.com/opencontainers/runc/libcontainer/label" + rsystem "github.com/opencontainers/runc/libcontainer/system" "github.com/opencontainers/runc/libcontainer/user" "github.com/opencontainers/runtime-spec/specs-go" ) @@ -1147,10 +1148,16 @@ func setupOOMScoreAdj(score int) error { if err != nil { return err } - _, err = f.WriteString(strconv.Itoa(score)) + + stringScore := strconv.Itoa(score) + _, err = f.WriteString(stringScore) if os.IsPermission(err) { // Setting oom_score_adj does not work in an - // unprivileged container. Ignore the error. + // unprivileged container. Ignore the error, but log + // it if we appear not to be in that situation. + if !rsystem.RunningInUserNS() { + logrus.Debugf("Permission denied writing %q to /proc/self/oom_score_adj", stringScore) + } return nil } f.Close() diff --git a/components/engine/libcontainerd/remote_linux.go b/components/engine/libcontainerd/remote_linux.go index 1689f90cc0..06a726aa09 100644 --- a/components/engine/libcontainerd/remote_linux.go +++ b/components/engine/libcontainerd/remote_linux.go @@ -22,6 +22,7 @@ import ( "github.com/docker/docker/utils" "github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes/timestamp" + rsystem "github.com/opencontainers/runc/libcontainer/system" "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/grpclog" @@ -429,15 +430,21 @@ func (r *remote) runContainerdDaemon() error { } func setOOMScore(pid, score int) error { - f, err := os.OpenFile(fmt.Sprintf("/proc/%d/oom_score_adj", pid), os.O_WRONLY, 0) + oomScoreAdjPath := fmt.Sprintf("/proc/%d/oom_score_adj", pid) + f, err := os.OpenFile(oomScoreAdjPath, os.O_WRONLY, 0) if err != nil { return err } - _, err = f.WriteString(strconv.Itoa(score)) + stringScore := strconv.Itoa(score) + _, err = f.WriteString(stringScore) f.Close() if os.IsPermission(err) { // Setting oom_score_adj does not work in an - // unprivileged container. Ignore the error. + // unprivileged container. Ignore the error, but log + // it if we appear not to be in that situation. + if !rsystem.RunningInUserNS() { + logrus.Debugf("Permission denied writing %q to %s", stringScore, oomScoreAdjPath) + } return nil } return err