浏览代码

Implemented oom_score_adj

Signed-off-by: George Lester <[email protected]>
George Lester 9 年之前
父节点
当前提交
6fe5d2b543

+ 1 - 0
compose/config/config.py

@@ -70,6 +70,7 @@ DOCKER_CONFIG_KEYS = [
     'mem_limit',
     'memswap_limit',
     'net',
+    'oom_score_adj'
     'pid',
     'ports',
     'privileged',

+ 1 - 0
compose/config/config_schema_v2.0.json

@@ -166,6 +166,7 @@
             }
           ]
         },
+        "oom_score_adj": {"type": "integer", "minimum": -1000, "maximum": 1000},
         "pid": {"type": ["string", "null"]},
 
         "ports": {

+ 2 - 0
compose/service.py

@@ -53,6 +53,7 @@ DOCKER_START_KEYS = [
     'log_opt',
     'mem_limit',
     'memswap_limit',
+    'oom_score_adj',
     'pid',
     'privileged',
     'restart',
@@ -695,6 +696,7 @@ class Service(object):
             cpu_quota=options.get('cpu_quota'),
             shm_size=options.get('shm_size'),
             tmpfs=options.get('tmpfs'),
+            oom_score_adj=options.get('oom_score_adj')
         )
 
     def build(self, no_cache=False, pull=False, force_rm=False):

+ 1 - 1
docs/compose-file.md

@@ -715,7 +715,7 @@ then read-write will be used.
 >     - container_name
 >     - container_name:rw
 
-### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir
+### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, oom_score_adj, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir
 
 Each of these is a single value, analogous to its
 [docker run](https://docs.docker.com/engine/reference/run/) counterpart.

+ 5 - 0
tests/integration/service_test.py

@@ -854,6 +854,11 @@ class ServiceTest(DockerClientTestCase):
         container = create_and_start_container(service)
         self.assertEqual(container.get('HostConfig.RestartPolicy.Name'), 'always')
 
+    def test_oom_score_adj_value(self):
+        service = self.create_service('web', oom_score_adj=500)
+        container = create_and_start_container(service)
+        self.assertEqual(container.get('HostConfig.OomScoreAdj'), 500)
+
     def test_restart_on_failure_value(self):
         service = self.create_service('web', restart={
             'Name': 'on-failure',

+ 20 - 0
tests/unit/config/config_test.py

@@ -1243,6 +1243,26 @@ class ConfigTest(unittest.TestCase):
             }
         ]
 
+    def test_oom_score_adj_option(self):
+
+        actual = config.load(build_config_details({
+            'version': '2',
+            'services': {
+                'web': {
+                    'image': 'alpine',
+                    'oom_score_adj': 500
+                }
+            }
+        }))
+
+        assert actual.services == [
+            {
+                'name': 'web',
+                'image': 'alpine',
+                'oom_score_adj': 500
+            }
+        ]
+
     def test_merge_service_dicts_from_files_with_extends_in_base(self):
         base = {
             'volumes': ['.:/app'],