Come modificare le risorse assegnate ad un contenitore in fase di esecuzione?

Sono consapevole che posso limitare le risorse assegnate a un contenitore mentre provvedono utilizzando il docker con i flag -c e -m per CPU e memory.

Tuttavia, esiste un modo per cambiare queste risorse allocato in modo dinamico (dopo che sono stati forniti) e senza ridisporre lo stesso contenitore con risorse modificate?

non al momento no – C'è il desiderio di vedere qualcuno che lo attua però: https://github.com/docker/docker/issues/6323

Al momento (Docker v1.11.1) dispone docker update del command docker update ( visualizza i documenti ). Con questo puoi cambiare le risorse assegnate al volo.

 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 

Questo potrebbe essere disponibile per il docker 1.10 o 1.11 (Q1 2016): PR 15078 implementa (dicembre 2015) il supporto per la modifica delle risorse (compresa la CPU) sia per il contenitore che è stato arrestato e che viene eseguito .

Aggiornamento 2016: fa parte del docker 1.10 e documentato in docker update ( PR 15078 ).

Abbiamo deciso di consentire di impostare ciò che abbiamo chiamato risorse, che per ora è costituito da elementi cgroup, quindi il seguente PR # 18073 .
Gli unici elementi mutabili consentiti di un contenitore sono in HostConfig e precisamente in risorse (vedere la struttura ).

 resources := runconfig.Resources{ BlkioWeight: *flBlkioWeight, CpusetCpus: *flCpusetCpus, <==== CpusetMems: *flCpusetMems, <==== CPUShares: *flCPUShares, <==== Memory: flMemory, MemoryReservation: memoryReservation, MemorySwap: memorySwap, KernelMemory: kernelMemory, CPUPeriod: *flCPUPeriod, CPUQuota: *flCPUQuota, } 
  • Il command dovrebbe essere set (alla fine: update ).
  • Le modifiche consentite vengono passate come flag: ad esempio --memory=1Gb --cpushare=… (come questo PR).
  • Esiste una bandiera per each attributo della struttura delle Resources (e non più, non less).

Si noti che la modifica tramite docker set dovrebbe persistere.
Ovvero, tali modifiche sarebbero permanenti (aggiornate nel JSON del contenitore)