@@ -23,29 +23,50 @@ import (
23
23
24
24
// Mapping from linux resource names to limits.LimitType.
25
25
var fromLinuxResource = map [string ]limits.LimitType {
26
+ "RLIMIT_AS" : limits .AS ,
27
+ "RLIMIT_CORE" : limits .Core ,
26
28
"RLIMIT_CPU" : limits .CPU ,
27
- "RLIMIT_FSIZE" : limits .FileSize ,
28
29
"RLIMIT_DATA" : limits .Data ,
29
- "RLIMIT_STACK" : limits .Stack ,
30
- "RLIMIT_CORE" : limits .Core ,
31
- "RLIMIT_RSS" : limits .Rss ,
32
- "RLIMIT_NPROC" : limits .ProcessCount ,
33
- "RLIMIT_NOFILE" : limits .NumberOfFiles ,
34
- "RLIMIT_MEMLOCK" : limits .MemoryPagesLocked ,
35
- "RLIMIT_AS" : limits .AS ,
30
+ "RLIMIT_FSIZE" : limits .FileSize ,
36
31
"RLIMIT_LOCKS" : limits .Locks ,
37
- "RLIMIT_SIGPENDING " : limits .SignalsPending ,
32
+ "RLIMIT_MEMLOCK " : limits .MemoryPagesLocked ,
38
33
"RLIMIT_MSGQUEUE" : limits .MessageQueueBytes ,
39
34
"RLIMIT_NICE" : limits .Nice ,
35
+ "RLIMIT_NOFILE" : limits .NumberOfFiles ,
36
+ "RLIMIT_NPROC" : limits .ProcessCount ,
37
+ "RLIMIT_RSS" : limits .Rss ,
40
38
"RLIMIT_RTPRIO" : limits .RealTimePriority ,
41
39
"RLIMIT_RTTIME" : limits .Rttime ,
40
+ "RLIMIT_SIGPENDING" : limits .SignalsPending ,
41
+ "RLIMIT_STACK" : limits .Stack ,
42
42
}
43
43
44
44
func createLimitSet (spec * specs.Spec ) (* limits.LimitSet , error ) {
45
- ls , err := limits .NewLinuxDistroLimitSet ()
45
+ ls , err := limits .NewLinuxLimitSet ()
46
46
if err != nil {
47
47
return nil , err
48
48
}
49
+
50
+ // Set default limits based on what containers get by default, ex:
51
+ // $ docker run --rm debian prlimit
52
+ ls .SetUnchecked (limits .AS , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
53
+ ls .SetUnchecked (limits .Core , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
54
+ ls .SetUnchecked (limits .CPU , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
55
+ ls .SetUnchecked (limits .Data , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
56
+ ls .SetUnchecked (limits .FileSize , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
57
+ ls .SetUnchecked (limits .Locks , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
58
+ ls .SetUnchecked (limits .MemoryPagesLocked , limits.Limit {Cur : 65536 , Max : 65536 })
59
+ ls .SetUnchecked (limits .MessageQueueBytes , limits.Limit {Cur : 819200 , Max : 819200 })
60
+ ls .SetUnchecked (limits .Nice , limits.Limit {Cur : 0 , Max : 0 })
61
+ ls .SetUnchecked (limits .NumberOfFiles , limits.Limit {Cur : 1048576 , Max : 1048576 })
62
+ ls .SetUnchecked (limits .ProcessCount , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
63
+ ls .SetUnchecked (limits .Rss , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
64
+ ls .SetUnchecked (limits .RealTimePriority , limits.Limit {Cur : 0 , Max : 0 })
65
+ ls .SetUnchecked (limits .Rttime , limits.Limit {Cur : limits .Infinity , Max : limits .Infinity })
66
+ ls .SetUnchecked (limits .SignalsPending , limits.Limit {Cur : 0 , Max : 0 })
67
+ ls .SetUnchecked (limits .Stack , limits.Limit {Cur : 8388608 , Max : limits .Infinity })
68
+
69
+ // Then apply overwrites on top of defaults.
49
70
for _ , rl := range spec .Process .Rlimits {
50
71
lt , ok := fromLinuxResource [rl .Type ]
51
72
if ! ok {
0 commit comments