mirror of
https://github.com/clearlinux/docker.git
synced 2026-09-05 05:01:28 +00:00
Engine: new command 'stop' gracefully stops a container.
This commit is contained in:
committed by
Victor Vieux
parent
bef8de9319
commit
dbe1915fee
@@ -79,6 +79,10 @@ func jobInitApi(job *engine.Job) engine.Status {
|
||||
job.Error(err)
|
||||
return engine.StatusErr
|
||||
}
|
||||
if err := job.Eng.Register("stop", srv.ContainerStop); err != nil {
|
||||
job.Error(err)
|
||||
return engine.StatusErr
|
||||
}
|
||||
if err := job.Eng.Register("start", srv.ContainerStart); err != nil {
|
||||
job.Error(err)
|
||||
return engine.StatusErr
|
||||
@@ -1713,16 +1717,34 @@ func (srv *Server) ContainerStart(job *engine.Job) engine.Status {
|
||||
return engine.StatusOK
|
||||
}
|
||||
|
||||
func (srv *Server) ContainerStop(name string, t int) error {
|
||||
func (srv *Server) ContainerStop(job *engine.Job) engine.Status {
|
||||
if len(job.Args) < 1 {
|
||||
job.Errorf("Not enough arguments. Usage: %s CONTAINER TIMEOUT\n", job.Name)
|
||||
return engine.StatusErr
|
||||
}
|
||||
name := job.Args[0]
|
||||
var t uint64
|
||||
if len(job.Args) == 2 {
|
||||
var err error
|
||||
t, err = strconv.ParseUint(job.Args[1], 10, 32)
|
||||
if err != nil {
|
||||
job.Errorf("Invalid delay format: %s. Please provide an integer number of seconds.\n", job.Args[1])
|
||||
return engine.StatusErr
|
||||
}
|
||||
} else {
|
||||
t = 10
|
||||
}
|
||||
if container := srv.runtime.Get(name); container != nil {
|
||||
if err := container.Stop(t); err != nil {
|
||||
return fmt.Errorf("Cannot stop container %s: %s", name, err)
|
||||
if err := container.Stop(int(t)); err != nil {
|
||||
job.Errorf("Cannot stop container %s: %s\n", name, err)
|
||||
return engine.StatusErr
|
||||
}
|
||||
srv.LogEvent("stop", container.ID, srv.runtime.repositories.ImageName(container.Image))
|
||||
} else {
|
||||
return fmt.Errorf("No such container: %s", name)
|
||||
job.Errorf("No such container: %s\n", name)
|
||||
return engine.StatusErr
|
||||
}
|
||||
return nil
|
||||
return engine.StatusOK
|
||||
}
|
||||
|
||||
func (srv *Server) ContainerWait(job *engine.Job) engine.Status {
|
||||
|
||||
Reference in New Issue
Block a user