github.com/toplink-cn/moby@v0.0.0-20240305205811-460b4aebdf81/daemon/unpause.go (about)

     1  package daemon // import "github.com/docker/docker/daemon"
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/containerd/log"
     8  	"github.com/docker/docker/api/types/events"
     9  	"github.com/docker/docker/container"
    10  )
    11  
    12  // ContainerUnpause unpauses a container
    13  func (daemon *Daemon) ContainerUnpause(name string) error {
    14  	ctr, err := daemon.GetContainer(name)
    15  	if err != nil {
    16  		return err
    17  	}
    18  	return daemon.containerUnpause(ctr)
    19  }
    20  
    21  // containerUnpause resumes the container execution after the container is paused.
    22  func (daemon *Daemon) containerUnpause(ctr *container.Container) error {
    23  	ctr.Lock()
    24  	defer ctr.Unlock()
    25  
    26  	// We cannot unpause the container which is not paused
    27  	if !ctr.Paused {
    28  		return fmt.Errorf("Container %s is not paused", ctr.ID)
    29  	}
    30  	tsk, err := ctr.GetRunningTask()
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	if err := tsk.Resume(context.Background()); err != nil {
    36  		return fmt.Errorf("Cannot unpause container %s: %s", ctr.ID, err)
    37  	}
    38  
    39  	ctr.Paused = false
    40  	daemon.setStateCounter(ctr)
    41  	daemon.updateHealthMonitor(ctr)
    42  	daemon.LogContainerEvent(ctr, events.ActionUnPause)
    43  
    44  	if err := ctr.CheckpointTo(daemon.containersReplica); err != nil {
    45  		log.G(context.TODO()).WithError(err).Warn("could not save container to disk")
    46  	}
    47  
    48  	return nil
    49  }