mirror of
https://github.com/containers/podman.git
synced 2025-06-22 01:48:54 +08:00
Merge pull request #7811 from rhatdan/sysctls
Ignore containers.conf sysctl when namespaces set to host
This commit is contained in:
@ -448,7 +448,7 @@ func GetCreateFlags(cf *ContainerCLIOpts) *pflag.FlagSet {
|
|||||||
|
|
||||||
createFlags.StringSliceVar(
|
createFlags.StringSliceVar(
|
||||||
&cf.Sysctl,
|
&cf.Sysctl,
|
||||||
"sysctl", containerConfig.Sysctls(),
|
"sysctl", []string{},
|
||||||
"Sysctl options",
|
"Sysctl options",
|
||||||
)
|
)
|
||||||
createFlags.StringVar(
|
createFlags.StringVar(
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/containers/common/pkg/capabilities"
|
"github.com/containers/common/pkg/capabilities"
|
||||||
"github.com/containers/common/pkg/config"
|
"github.com/containers/common/pkg/config"
|
||||||
"github.com/containers/podman/v2/libpod"
|
"github.com/containers/podman/v2/libpod"
|
||||||
|
"github.com/containers/podman/v2/libpod/define"
|
||||||
"github.com/containers/podman/v2/libpod/image"
|
"github.com/containers/podman/v2/libpod/image"
|
||||||
"github.com/containers/podman/v2/pkg/specgen"
|
"github.com/containers/podman/v2/pkg/specgen"
|
||||||
"github.com/containers/podman/v2/pkg/util"
|
"github.com/containers/podman/v2/pkg/util"
|
||||||
@ -167,7 +168,52 @@ func securityConfigureGenerator(s *specgen.SpecGenerator, g *generate.Generator,
|
|||||||
}
|
}
|
||||||
|
|
||||||
g.SetRootReadonly(s.ReadOnlyFilesystem)
|
g.SetRootReadonly(s.ReadOnlyFilesystem)
|
||||||
|
|
||||||
|
// Add default sysctls
|
||||||
|
defaultSysctls, err := util.ValidateSysctls(rtc.Sysctls())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for sysctlKey, sysctlVal := range defaultSysctls {
|
||||||
|
|
||||||
|
// Ignore mqueue sysctls if --ipc=host
|
||||||
|
if s.IpcNS.IsHost() && strings.HasPrefix(sysctlKey, "fs.mqueue.") {
|
||||||
|
logrus.Infof("Sysctl %s=%s ignored in containers.conf, since IPC Namespace set to host", sysctlKey, sysctlVal)
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore net sysctls if --net=host
|
||||||
|
if s.NetNS.IsHost() && strings.HasPrefix(sysctlKey, "net.") {
|
||||||
|
logrus.Infof("Sysctl %s=%s ignored in containers.conf, since Network Namespace set to host", sysctlKey, sysctlVal)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore uts sysctls if --uts=host
|
||||||
|
if s.UtsNS.IsHost() && (strings.HasPrefix(sysctlKey, "kernel.domainname") || strings.HasPrefix(sysctlKey, "kernel.hostname")) {
|
||||||
|
logrus.Infof("Sysctl %s=%s ignored in containers.conf, since UTS Namespace set to host", sysctlKey, sysctlVal)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
g.AddLinuxSysctl(sysctlKey, sysctlVal)
|
||||||
|
}
|
||||||
|
|
||||||
for sysctlKey, sysctlVal := range s.Sysctl {
|
for sysctlKey, sysctlVal := range s.Sysctl {
|
||||||
|
|
||||||
|
if s.IpcNS.IsHost() && strings.HasPrefix(sysctlKey, "fs.mqueue.") {
|
||||||
|
return errors.Wrapf(define.ErrInvalidArg, "sysctl %s=%s can't be set since IPC Namespace set to host", sysctlKey, sysctlVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore net sysctls if --net=host
|
||||||
|
if s.NetNS.IsHost() && strings.HasPrefix(sysctlKey, "net.") {
|
||||||
|
return errors.Wrapf(define.ErrInvalidArg, "sysctl %s=%s can't be set since Host Namespace set to host", sysctlKey, sysctlVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore uts sysctls if --uts=host
|
||||||
|
if s.UtsNS.IsHost() && (strings.HasPrefix(sysctlKey, "kernel.domainname") || strings.HasPrefix(sysctlKey, "kernel.hostname")) {
|
||||||
|
return errors.Wrapf(define.ErrInvalidArg, "sysctl %s=%s can't be set since UTS Namespace set to host", sysctlKey, sysctlVal)
|
||||||
|
}
|
||||||
|
|
||||||
g.AddLinuxSysctl(sysctlKey, sysctlVal)
|
g.AddLinuxSysctl(sysctlKey, sysctlVal)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,6 +179,12 @@ var _ = Describe("Podman run", func() {
|
|||||||
session.WaitWithDefaultTimeout()
|
session.WaitWithDefaultTimeout()
|
||||||
Expect(session.ExitCode()).To(Equal(0))
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
Expect(session.OutputToString()).To(ContainSubstring("1000"))
|
Expect(session.OutputToString()).To(ContainSubstring("1000"))
|
||||||
|
|
||||||
|
// Ignore containers.conf setting if --net=host
|
||||||
|
session = podmanTest.Podman([]string{"run", "--rm", "--net", "host", fedoraMinimal, "cat", "/proc/sys/net/ipv4/ping_group_range"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
Expect(session.OutputToString()).ToNot((ContainSubstring("1000")))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman run containers.conf search domain", func() {
|
It("podman run containers.conf search domain", func() {
|
||||||
|
@ -373,6 +373,11 @@ USER bin`
|
|||||||
session.WaitWithDefaultTimeout()
|
session.WaitWithDefaultTimeout()
|
||||||
Expect(session.ExitCode()).To(Equal(0))
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
Expect(session.OutputToString()).To(ContainSubstring("net.core.somaxconn = 65535"))
|
Expect(session.OutputToString()).To(ContainSubstring("net.core.somaxconn = 65535"))
|
||||||
|
|
||||||
|
// network sysctls should fail if --net=host is set
|
||||||
|
session = podmanTest.Podman([]string{"run", "--net", "host", "--rm", "--sysctl", "net.core.somaxconn=65535", ALPINE, "sysctl", "net.core.somaxconn"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(125))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman run blkio-weight test", func() {
|
It("podman run blkio-weight test", func() {
|
||||||
|
Reference in New Issue
Block a user