Files
docker-cli/components/engine/daemon/update.go
Qiang Huang c4af30652d Implemet docker update command
It's used for updating properties of one or more containers, we only
support resource configs for now. It can be extended in the future.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
Upstream-commit: 8799c4fc0feadede6ae60e77bd7d9dfd7cc72a79
Component: engine
2015-12-28 19:19:26 +08:00

59 lines
1.4 KiB
Go

package daemon
import (
"fmt"
"github.com/docker/docker/api/types/container"
)
// ContainerUpdate updates resources of the container
func (daemon *Daemon) ContainerUpdate(name string, hostConfig *container.HostConfig) ([]string, error) {
var warnings []string
warnings, err := daemon.verifyContainerSettings(hostConfig, nil)
if err != nil {
return warnings, err
}
if err := daemon.update(name, hostConfig); err != nil {
return warnings, err
}
return warnings, nil
}
func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) error {
if hostConfig == nil {
return nil
}
container, err := daemon.GetContainer(name)
if err != nil {
return err
}
if container.RemovalInProgress || container.Dead {
return fmt.Errorf("Container is marked for removal and cannot be \"update\".")
}
if container.IsRunning() && hostConfig.KernelMemory != 0 {
return fmt.Errorf("Can not update kernel memory to a running container, please stop it first.")
}
if err := container.UpdateContainer(hostConfig); err != nil {
return err
}
// If container is not running, update hostConfig struct is enough,
// resources will be updated when the container is started again.
// If container is running (including paused), we need to update configs
// to the real world.
if container.IsRunning() {
if err := daemon.execDriver.Update(container.Command); err != nil {
return err
}
}
return nil
}