update.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package client
  2. import (
  3. "fmt"
  4. "strings"
  5. Cli "github.com/docker/docker/cli"
  6. flag "github.com/docker/docker/pkg/mflag"
  7. "github.com/docker/docker/runconfig/opts"
  8. "github.com/docker/engine-api/types/container"
  9. "github.com/docker/go-units"
  10. )
  11. // CmdUpdate updates resources of one or more containers.
  12. //
  13. // Usage: docker update [OPTIONS] CONTAINER [CONTAINER...]
  14. func (cli *DockerCli) CmdUpdate(args ...string) error {
  15. cmd := Cli.Subcmd("update", []string{"CONTAINER [CONTAINER...]"}, Cli.DockerCommands["update"].Description, true)
  16. flBlkioWeight := cmd.Uint16([]string{"-blkio-weight"}, 0, "Block IO (relative weight), between 10 and 1000")
  17. flCPUPeriod := cmd.Int64([]string{"-cpu-period"}, 0, "Limit CPU CFS (Completely Fair Scheduler) period")
  18. flCPUQuota := cmd.Int64([]string{"-cpu-quota"}, 0, "Limit CPU CFS (Completely Fair Scheduler) quota")
  19. flCpusetCpus := cmd.String([]string{"-cpuset-cpus"}, "", "CPUs in which to allow execution (0-3, 0,1)")
  20. flCpusetMems := cmd.String([]string{"-cpuset-mems"}, "", "MEMs in which to allow execution (0-3, 0,1)")
  21. flCPUShares := cmd.Int64([]string{"#c", "-cpu-shares"}, 0, "CPU shares (relative weight)")
  22. flMemoryString := cmd.String([]string{"m", "-memory"}, "", "Memory limit")
  23. flMemoryReservation := cmd.String([]string{"-memory-reservation"}, "", "Memory soft limit")
  24. flMemorySwap := cmd.String([]string{"-memory-swap"}, "", "Swap limit equal to memory plus swap: '-1' to enable unlimited swap")
  25. flKernelMemory := cmd.String([]string{"-kernel-memory"}, "", "Kernel memory limit")
  26. flRestartPolicy := cmd.String([]string{"-restart"}, "", "Restart policy to apply when a container exits")
  27. cmd.Require(flag.Min, 1)
  28. cmd.ParseFlags(args, true)
  29. if cmd.NFlag() == 0 {
  30. return fmt.Errorf("You must provide one or more flags when using this command.")
  31. }
  32. var err error
  33. var flMemory int64
  34. if *flMemoryString != "" {
  35. flMemory, err = units.RAMInBytes(*flMemoryString)
  36. if err != nil {
  37. return err
  38. }
  39. }
  40. var memoryReservation int64
  41. if *flMemoryReservation != "" {
  42. memoryReservation, err = units.RAMInBytes(*flMemoryReservation)
  43. if err != nil {
  44. return err
  45. }
  46. }
  47. var memorySwap int64
  48. if *flMemorySwap != "" {
  49. if *flMemorySwap == "-1" {
  50. memorySwap = -1
  51. } else {
  52. memorySwap, err = units.RAMInBytes(*flMemorySwap)
  53. if err != nil {
  54. return err
  55. }
  56. }
  57. }
  58. var kernelMemory int64
  59. if *flKernelMemory != "" {
  60. kernelMemory, err = units.RAMInBytes(*flKernelMemory)
  61. if err != nil {
  62. return err
  63. }
  64. }
  65. var restartPolicy container.RestartPolicy
  66. if *flRestartPolicy != "" {
  67. restartPolicy, err = opts.ParseRestartPolicy(*flRestartPolicy)
  68. if err != nil {
  69. return err
  70. }
  71. }
  72. resources := container.Resources{
  73. BlkioWeight: *flBlkioWeight,
  74. CpusetCpus: *flCpusetCpus,
  75. CpusetMems: *flCpusetMems,
  76. CPUShares: *flCPUShares,
  77. Memory: flMemory,
  78. MemoryReservation: memoryReservation,
  79. MemorySwap: memorySwap,
  80. KernelMemory: kernelMemory,
  81. CPUPeriod: *flCPUPeriod,
  82. CPUQuota: *flCPUQuota,
  83. }
  84. updateConfig := container.UpdateConfig{
  85. Resources: resources,
  86. RestartPolicy: restartPolicy,
  87. }
  88. names := cmd.Args()
  89. var errs []string
  90. for _, name := range names {
  91. if err := cli.client.ContainerUpdate(name, updateConfig); err != nil {
  92. errs = append(errs, err.Error())
  93. } else {
  94. fmt.Fprintf(cli.out, "%s\n", name)
  95. }
  96. }
  97. if len(errs) > 0 {
  98. return fmt.Errorf("%s", strings.Join(errs, "\n"))
  99. }
  100. return nil
  101. }