Skip to content

Commit ba5ed2a

Browse files
committed
daemon: support default pids limit
Signed-off-by: Antonio Murdaca <runcom@linux.com>
1 parent 16adb19 commit ba5ed2a

3 files changed

Lines changed: 13 additions & 3 deletions

File tree

daemon/config_unix.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type Config struct {
3030
EnableSelinuxSupport bool `json:"selinux-enabled,omitempty"`
3131
RemappedRoot string `json:"userns-remap,omitempty"`
3232
Ulimits map[string]*units.Ulimit `json:"default-ulimits,omitempty"`
33+
PidsLimit int64 `json:"default-pids-limit"`
3334
CPURealtimePeriod int64 `json:"cpu-rt-period,omitempty"`
3435
CPURealtimeRuntime int64 `json:"cpu-rt-runtime,omitempty"`
3536
OOMScoreAdjust int `json:"oom-score-adjust,omitempty"`
@@ -92,6 +93,7 @@ func (config *Config) InstallFlags(flags *pflag.FlagSet) {
9293
flags.StringVar(&config.InitPath, "init-path", "", "Path to the docker-init binary")
9394
flags.Int64Var(&config.CPURealtimePeriod, "cpu-rt-period", 0, "Limit the CPU real-time period in microseconds")
9495
flags.Int64Var(&config.CPURealtimeRuntime, "cpu-rt-runtime", 0, "Limit the CPU real-time runtime in microseconds")
96+
flags.Int64Var(&config.PidsLimit, "default-pids-limit", 4096, "Limit the number of processes each container is restricted to")
9597
flags.StringVar(&config.SeccompProfile, "seccomp-profile", "", "Path to seccomp profile")
9698
flags.BoolVar(&config.SigCheck, "signature-verification", true, "Check image's signatures on pull")
9799
flags.BoolVar(&config.EnableSecrets, "enable-secrets", true, "Enable Secrets")

daemon/daemon.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/docker/docker/pkg/mount"
3232
"github.com/docker/docker/plugin"
3333
"github.com/docker/libnetwork/cluster"
34+
3435
// register graph drivers
3536
_ "github.com/docker/docker/daemon/graphdriver/register"
3637
dmetadata "github.com/docker/docker/distribution/metadata"
@@ -695,6 +696,10 @@ func NewDaemon(config *Config, registryService registry.Service, containerdRemot
695696
if runtime.GOOS == "linux" && !sysInfo.CgroupDevicesEnabled {
696697
return nil, fmt.Errorf("Devices cgroup isn't mounted")
697698
}
699+
if d.configStore.PidsLimit != 0 && !sysInfo.PidsLimit {
700+
logrus.Warn("Your kernel does not support pids limit capabilities or the cgroup is not mounted. PIDs limit discarded.")
701+
d.configStore.PidsLimit = 0
702+
}
698703

699704
d.ID = trustKey.PublicKey().KeyID()
700705
d.repository = daemonRepo

daemon/oci_linux.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,6 @@ func setResources(s *specs.Spec, r containertypes.Resources) error {
6666
ThrottleWriteIOPSDevice: writeIOpsDevice,
6767
},
6868
DisableOOMKiller: r.OomKillDisable,
69-
Pids: &specs.Pids{
70-
Limit: &r.PidsLimit,
71-
},
7269
}
7370

7471
if s.Linux.Resources != nil && len(s.Linux.Resources.Devices) > 0 {
@@ -645,6 +642,12 @@ func (daemon *Daemon) createSpec(c *container.Container) (*specs.Spec, error) {
645642
if err := setResources(&s, c.HostConfig.Resources); err != nil {
646643
return nil, fmt.Errorf("linux runtime spec resources: %v", err)
647644
}
645+
s.Linux.Resources.Pids = &specs.Pids{
646+
Limit: &daemon.configStore.PidsLimit,
647+
}
648+
if c.HostConfig.Resources.PidsLimit != 0 {
649+
s.Linux.Resources.Pids.Limit = &c.HostConfig.Resources.PidsLimit
650+
}
648651
s.Linux.Resources.OOMScoreAdj = &c.HostConfig.OomScoreAdj
649652
s.Linux.Sysctl = c.HostConfig.Sysctls
650653

0 commit comments

Comments
 (0)