Add systctl support for services
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
@ -151,6 +151,7 @@ func Service(
|
||||
Privileges: &privileges,
|
||||
Isolation: container.Isolation(service.Isolation),
|
||||
Init: service.Init,
|
||||
Sysctls: service.Sysctls,
|
||||
},
|
||||
LogDriver: logDriver,
|
||||
Resources: resources,
|
||||
|
||||
@ -240,6 +240,10 @@ services:
|
||||
|
||||
stop_signal: SIGUSR1
|
||||
|
||||
sysctls:
|
||||
net.core.somaxconn: 1024
|
||||
net.ipv4.tcp_syncookies: 0
|
||||
|
||||
# String or list
|
||||
# tmpfs: /run
|
||||
tmpfs:
|
||||
|
||||
@ -346,8 +346,12 @@ func services(workingDir, homeDir string) []types.ServiceConfig {
|
||||
StdinOpen: true,
|
||||
StopSignal: "SIGUSR1",
|
||||
StopGracePeriod: durationPtr(20 * time.Second),
|
||||
Tmpfs: []string{"/run", "/tmp"},
|
||||
Tty: true,
|
||||
Sysctls: map[string]string{
|
||||
"net.core.somaxconn": "1024",
|
||||
"net.ipv4.tcp_syncookies": "0",
|
||||
},
|
||||
Tmpfs: []string{"/run", "/tmp"},
|
||||
Tty: true,
|
||||
Ulimits: map[string]*types.UlimitsConfig{
|
||||
"nproc": {
|
||||
Single: 65535,
|
||||
@ -756,6 +760,9 @@ services:
|
||||
stdin_open: true
|
||||
stop_grace_period: 20s
|
||||
stop_signal: SIGUSR1
|
||||
sysctls:
|
||||
net.core.somaxconn: "1024"
|
||||
net.ipv4.tcp_syncookies: "0"
|
||||
tmpfs:
|
||||
- /run
|
||||
- /tmp
|
||||
@ -1325,6 +1332,10 @@ func fullExampleJSON(workingDir string) string {
|
||||
"stdin_open": true,
|
||||
"stop_grace_period": "20s",
|
||||
"stop_signal": "SIGUSR1",
|
||||
"sysctls": {
|
||||
"net.core.somaxconn": "1024",
|
||||
"net.ipv4.tcp_syncookies": "0"
|
||||
},
|
||||
"tmpfs": [
|
||||
"/run",
|
||||
"/tmp"
|
||||
|
||||
@ -304,6 +304,7 @@ func createTransformHook(additionalTransformers ...Transformer) mapstructure.Dec
|
||||
reflect.TypeOf(types.ServiceConfigObjConfig{}): transformStringSourceMap,
|
||||
reflect.TypeOf(types.StringOrNumberList{}): transformStringOrNumberList,
|
||||
reflect.TypeOf(map[string]*types.ServiceNetworkConfig{}): transformServiceNetworkMap,
|
||||
reflect.TypeOf(types.Mapping{}): transformMappingOrListFunc("=", false),
|
||||
reflect.TypeOf(types.MappingWithEquals{}): transformMappingOrListFunc("=", true),
|
||||
reflect.TypeOf(types.Labels{}): transformMappingOrListFunc("=", false),
|
||||
reflect.TypeOf(types.MappingWithColon{}): transformMappingOrListFunc(":", false),
|
||||
|
||||
@ -1461,6 +1461,47 @@ services:
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadSysctls(t *testing.T) {
|
||||
config, err := loadYAML(`
|
||||
version: "3.8"
|
||||
services:
|
||||
web:
|
||||
image: busybox
|
||||
sysctls:
|
||||
- net.core.somaxconn=1024
|
||||
- net.ipv4.tcp_syncookies=0
|
||||
- testing.one.one=
|
||||
- testing.one.two
|
||||
`)
|
||||
assert.NilError(t, err)
|
||||
|
||||
expected := types.Mapping{
|
||||
"net.core.somaxconn": "1024",
|
||||
"net.ipv4.tcp_syncookies": "0",
|
||||
"testing.one.one": "",
|
||||
"testing.one.two": "",
|
||||
}
|
||||
|
||||
assert.Assert(t, is.Len(config.Services, 1))
|
||||
assert.Check(t, is.DeepEqual(expected, config.Services[0].Sysctls))
|
||||
|
||||
config, err = loadYAML(`
|
||||
version: "3.8"
|
||||
services:
|
||||
web:
|
||||
image: busybox
|
||||
sysctls:
|
||||
net.core.somaxconn: 1024
|
||||
net.ipv4.tcp_syncookies: 0
|
||||
testing.one.one: ""
|
||||
testing.one.two:
|
||||
`)
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Assert(t, is.Len(config.Services, 1))
|
||||
assert.Check(t, is.DeepEqual(expected, config.Services[0].Sysctls))
|
||||
}
|
||||
|
||||
func TestTransform(t *testing.T) {
|
||||
var source = []interface{}{
|
||||
"80-82:8080-8082",
|
||||
|
||||
@ -24,7 +24,6 @@ var UnsupportedProperties = []string{
|
||||
"restart",
|
||||
"security_opt",
|
||||
"shm_size",
|
||||
"sysctls",
|
||||
"ulimits",
|
||||
"userns_mode",
|
||||
}
|
||||
@ -200,7 +199,7 @@ type ServiceConfig struct {
|
||||
StdinOpen bool `mapstructure:"stdin_open" yaml:"stdin_open,omitempty" json:"stdin_open,omitempty"`
|
||||
StopGracePeriod *Duration `mapstructure:"stop_grace_period" yaml:"stop_grace_period,omitempty" json:"stop_grace_period,omitempty"`
|
||||
StopSignal string `mapstructure:"stop_signal" yaml:"stop_signal,omitempty" json:"stop_signal,omitempty"`
|
||||
Sysctls StringList `yaml:",omitempty" json:"sysctls,omitempty"`
|
||||
Sysctls Mapping `yaml:",omitempty" json:"sysctls,omitempty"`
|
||||
Tmpfs StringList `yaml:",omitempty" json:"tmpfs,omitempty"`
|
||||
Tty bool `mapstructure:"tty" yaml:"tty,omitempty" json:"tty,omitempty"`
|
||||
Ulimits map[string]*UlimitsConfig `yaml:",omitempty" json:"ulimits,omitempty"`
|
||||
@ -240,6 +239,12 @@ type StringOrNumberList []string
|
||||
// For the key without value (`key`), the mapped value is set to nil.
|
||||
type MappingWithEquals map[string]*string
|
||||
|
||||
// Mapping is a mapping type that can be converted from a list of
|
||||
// key[=value] strings.
|
||||
// For the key with an empty value (`key=`), or key without value (`key`), the
|
||||
// mapped value is set to an empty string `""`.
|
||||
type Mapping map[string]string
|
||||
|
||||
// Labels is a mapping type for labels
|
||||
type Labels map[string]string
|
||||
|
||||
|
||||
Reference in New Issue
Block a user