如何在运行时更改分配给容器的资源?
我知道,我可以限制分配给容器的资源,同时使用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中更新)