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