diff --git a/cmd/podman/common/create.go b/cmd/podman/common/create.go index afaa1942e1..8a3f02036a 100644 --- a/cmd/podman/common/create.go +++ b/cmd/podman/common/create.go @@ -348,8 +348,7 @@ func DefineCreateFlags(cmd *cobra.Command, cf *entities.ContainerCreateOptions, ) oomScoreAdjFlagName := "oom-score-adj" - createFlags.IntVar( - &cf.OOMScoreAdj, + createFlags.Int( oomScoreAdjFlagName, 0, "Tune the host's OOM preferences (-1000 to 1000)", ) diff --git a/cmd/podman/common/create_opts.go b/cmd/podman/common/create_opts.go index e5a2a0da3a..ad6b3870a8 100644 --- a/cmd/podman/common/create_opts.go +++ b/cmd/podman/common/create_opts.go @@ -286,7 +286,7 @@ func ContainerCreateToContainerCLIOpts(cc handlers.CreateContainerConfig, rtc *c LogDriver: cc.HostConfig.LogConfig.Type, LogOptions: stringMaptoArray(cc.HostConfig.LogConfig.Config), Name: cc.Name, - OOMScoreAdj: cc.HostConfig.OomScoreAdj, + OOMScoreAdj: &cc.HostConfig.OomScoreAdj, Arch: "", OS: "", Variant: "", diff --git a/cmd/podman/containers/create.go b/cmd/podman/containers/create.go index de1a41e253..bbc449a1e4 100644 --- a/cmd/podman/containers/create.go +++ b/cmd/podman/containers/create.go @@ -238,6 +238,13 @@ func CreateInit(c *cobra.Command, vals entities.ContainerCreateOptions, isInfra vals.GroupAdd = groups } + if c.Flags().Changed("oom-score-adj") { + val, err := c.Flags().GetInt("oom-score-adj") + if err != nil { + return vals, err + } + vals.OOMScoreAdj = &val + } if c.Flags().Changed("pids-limit") { val := c.Flag("pids-limit").Value.String() // Convert -1 to 0, so that -1 maps to unlimited pids limit diff --git a/pkg/domain/entities/pods.go b/pkg/domain/entities/pods.go index da93d3f8bf..8406ca0195 100644 --- a/pkg/domain/entities/pods.go +++ b/pkg/domain/entities/pods.go @@ -210,7 +210,7 @@ type ContainerCreateOptions struct { Name string `json:"container_name"` NoHealthCheck bool OOMKillDisable bool - OOMScoreAdj int + OOMScoreAdj *int Arch string OS string Variant string diff --git a/pkg/specgenutil/specgen.go b/pkg/specgenutil/specgen.go index 186d3862b9..7d4fca8460 100644 --- a/pkg/specgenutil/specgen.go +++ b/pkg/specgenutil/specgen.go @@ -753,8 +753,8 @@ func FillOutSpecGen(s *specgen.SpecGenerator, c *entities.ContainerCreateOptions s.PreserveFDs = c.PreserveFDs } - if s.OOMScoreAdj == nil || c.OOMScoreAdj != 0 { - s.OOMScoreAdj = &c.OOMScoreAdj + if s.OOMScoreAdj == nil || c.OOMScoreAdj != nil { + s.OOMScoreAdj = c.OOMScoreAdj } if c.Restart != "" { splitRestart := strings.Split(c.Restart, ":") diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go index 1a93296b7f..6f3aabd3fc 100644 --- a/test/e2e/run_test.go +++ b/test/e2e/run_test.go @@ -609,6 +609,13 @@ USER bin`, BB) session.WaitWithDefaultTimeout() Expect(session).Should(Exit(0)) Expect(session.OutputToString()).To(Equal("111")) + + currentOOMScoreAdj, err := ioutil.ReadFile("/proc/self/oom_score_adj") + Expect(err).To(BeNil()) + session = podmanTest.Podman([]string{"run", "--rm", fedoraMinimal, "cat", "/proc/self/oom_score_adj"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + Expect(session.OutputToString()).To(Equal(strings.TrimRight(string(currentOOMScoreAdj), "\n"))) }) It("podman run limits host test", func() { diff --git a/test/system/030-run.bats b/test/system/030-run.bats index ec85ef1667..72e4a2bc80 100644 --- a/test/system/030-run.bats +++ b/test/system/030-run.bats @@ -815,4 +815,10 @@ EOF run_podman run --uidmap 0:10001:10002 --rm --hostname ${HOST} $IMAGE grep ${HOST} /etc/hosts is "${lines[0]}" ".*${HOST}.*" } + +@test "podman run doesn't override oom-score-adj" { + current_oom_score_adj=$(cat /proc/self/oom_score_adj) + run_podman run --rm $IMAGE cat /proc/self/oom_score_adj + is "$output" "$current_oom_score_adj" "different oom_score_adj in the container" +} # vim: filetype=sh