如何在运行时更改分配给容器的资源?

我知道,我可以限制分配给容器的资源,同时使用Docker的CPU和内存的-c-m标志。

但是,有没有办法可以将这些分配的资源dynamic地(在调配之后)更改为容器,而不用重新部署具有更改的资源的相同容器?

目前没有 – 不希望有人看到有人实施它: https : //github.com/docker/docker/issues/6323

当时(Docker v1.11.1)有命令docker update ( 查看文档 )。 有了这个,你可以随时改变分配的资源。

 Usage: docker update [OPTIONS] CONTAINER [CONTAINER...] Update configuration of one or more containers --blkio-weight Block IO (relative weight), between 10 and 1000 --cpu-shares CPU shares (relative weight) --cpu-period Limit CPU CFS (Completely Fair Scheduler) period --cpu-quota Limit CPU CFS (Completely Fair Scheduler) quota --cpuset-cpus CPUs in which to allow execution (0-3, 0,1) --cpuset-mems MEMs in which to allow execution (0-3, 0,1) --help Print usage --kernel-memory Kernel memory limit -m, --memory Memory limit --memory-reservation Memory soft limit --memory-swap Swap limit equal to memory plus swap: '-1' to enable unlimited swap --restart Restart policy to apply when a container exits 

Docker 1.10或1.11(2016年第一季度)可能即将到来: PR 15078正在实施(2015年12月)支持更改已停止和正在运行的容器的资源(包括CPU)。

更新2016年:它是docker1.10的一部分,并logging在docker update ( PR 15078 )。

我们决定允许设置我们所谓的资源,现在由cgroup东西组成,因此下面的PR#18073 。
容器中唯一允许的可变元素在HostConfig中,正好在Resources中(参见struct )。

 resources := runconfig.Resources{ BlkioWeight: *flBlkioWeight, CpusetCpus: *flCpusetCpus, <==== CpusetMems: *flCpusetMems, <==== CPUShares: *flCPUShares, <==== Memory: flMemory, MemoryReservation: memoryReservation, MemorySwap: memorySwap, KernelMemory: kernelMemory, CPUPeriod: *flCPUPeriod, CPUQuota: *flCPUQuota, } 
  • 该命令应该是 set (最后: update )。
  • 允许的更改作为标志传递:例如--memory=1Gb --cpushare=… (正如这个PR所做的那样)。
  • Resources结构的每个属性都有一个标志(不多也不less)。

请注意,通过docker set进行更改应该保持。
即,这些更改将永久(在容器的JSON中更新)