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

时间:2014-11-28 16:29:25

标签: resources docker

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

但是,有没有办法可以动态地将这些分配的资源更改为容器(在配置它们之后)并且不使用更改的资源重新部署相同的容器?

3 个答案:

答案 0 :(得分:20)

当时(Docker v1.11.1)有docker updateview docs)命令。有了这个,您可以动态更改分配的资源。

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

答案 1 :(得分:1)

目前还没有 - 有人希望看到有人实现它:https://github.com/docker/docker/issues/6323

答案 2 :(得分:1)

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

2016年更新:它是part of docker 1.10并记录在docker updatePR 15078)中。

  

我们决定允许设置我们称之为资源的资源,其中包括cgroup thingies,因此以下PR #18073
  容器中唯一允许的可变元素在HostConfig中,并且恰好在Resources中(参见struct)。

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

请注意,应通过--memory=1Gb --cpushare=…进行更改 即,这些更改将是永久性的(在容器的JSON中更新)