diff --git a/docker/api/container.py b/docker/api/container.py index 326e7679..c846e732 100644 --- a/docker/api/container.py +++ b/docker/api/container.py @@ -1190,9 +1190,9 @@ class ContainerApiMixin(object): @utils.check_resource('container') def update_container( self, container, blkio_weight=None, cpu_period=None, cpu_quota=None, - cpu_shares=None, cpuset_cpus=None, cpuset_mems=None, mem_limit=None, - mem_reservation=None, memswap_limit=None, kernel_memory=None, - restart_policy=None + cpu_shares=None, nano_cpus=None, cpuset_cpus=None, cpuset_mems=None, + mem_limit=None, mem_reservation=None, memswap_limit=None, + kernel_memory=None, restart_policy=None ): """ Update resource configs of one or more containers. @@ -1203,6 +1203,7 @@ class ContainerApiMixin(object): cpu_period (int): Limit CPU CFS (Completely Fair Scheduler) period cpu_quota (int): Limit CPU CFS (Completely Fair Scheduler) quota cpu_shares (int): CPU shares (relative weight) + nano_cpus (int): Number of CPUs cpuset_cpus (str): CPUs in which to allow execution cpuset_mems (str): MEMs in which to allow execution mem_limit (int or str): Memory limit @@ -1233,6 +1234,13 @@ class ContainerApiMixin(object): data['CpusetCpus'] = cpuset_cpus if cpuset_mems: data['CpusetMems'] = cpuset_mems + if nano_cpus: + if utils.version_lt(self._version, '1.29'): + raise errors.InvalidVersion( + 'Setting NanoCPUs is not supported ' + 'for API version < 1.29' + ) + data['NanoCPUs'] = nano_cpus if mem_limit: data['Memory'] = utils.parse_bytes(mem_limit) if mem_reservation: diff --git a/docker/models/containers.py b/docker/models/containers.py index 999851ec..373408a4 100644 --- a/docker/models/containers.py +++ b/docker/models/containers.py @@ -466,6 +466,7 @@ class Container(Model): cpu_period (int): Limit CPU CFS (Completely Fair Scheduler) period cpu_quota (int): Limit CPU CFS (Completely Fair Scheduler) quota cpu_shares (int): CPU shares (relative weight) + nano_cpus (int): Number of CPUs cpuset_cpus (str): CPUs in which to allow execution cpuset_mems (str): MEMs in which to allow execution mem_limit (int or str): Memory limit diff --git a/tests/unit/api_container_test.py b/tests/unit/api_container_test.py index a7e183c8..83b5d091 100644 --- a/tests/unit/api_container_test.py +++ b/tests/unit/api_container_test.py @@ -1438,11 +1438,12 @@ class ContainerTest(BaseAPIClientTest): def test_container_update(self): self.client.update_container( fake_api.FAKE_CONTAINER_ID, mem_limit='2k', cpu_shares=124, - blkio_weight=345 + blkio_weight=345, nano_cpus=2 ) args = fake_request.call_args assert args[0][1] == url_prefix + 'containers/3cc2351ab11b/update' assert json.loads(args[1]['data']) == { - 'Memory': 2 * 1024, 'CpuShares': 124, 'BlkioWeight': 345 + 'Memory': 2 * 1024, 'CpuShares': 124, 'BlkioWeight': 345, + 'NanoCPUs': 2 } assert args[1]['headers']['Content-Type'] == 'application/json'