diff --git a/daemon/container.go b/daemon/container.go index eec93502c9..57bdc01e70 100644 --- a/daemon/container.go +++ b/daemon/container.go @@ -68,16 +68,6 @@ func (daemon *Daemon) GetContainer(prefixOrName string) (*container.Container, e return ctr, nil } -// checkContainer make sure the specified container validates the specified conditions -func (daemon *Daemon) checkContainer(container *container.Container, conditions ...func(*container.Container) error) error { - for _, condition := range conditions { - if err := condition(container); err != nil { - return err - } - } - return nil -} - // Exists returns a true if a container of the specified ID or name exists, // false otherwise. func (daemon *Daemon) Exists(id string) bool { diff --git a/daemon/container_operations_unix.go b/daemon/container_operations_unix.go index b76b0043e5..3199dbfa6f 100644 --- a/daemon/container_operations_unix.go +++ b/daemon/container_operations_unix.go @@ -61,15 +61,19 @@ func (daemon *Daemon) setupLinkedContainers(container *container.Container) ([]s func (daemon *Daemon) getIpcContainer(id string) (*container.Container, error) { errMsg := "can't join IPC of container " + id - // Check the container exists + + // Check if the container exists, is running, and not restarting ctr, err := daemon.GetContainer(id) if err != nil { return nil, errors.Wrap(err, errMsg) } - // Check the container is running and not restarting - if err := daemon.checkContainer(ctr, containerIsRunning, containerIsNotRestarting); err != nil { - return nil, errors.Wrap(err, errMsg) + if !ctr.IsRunning() { + return nil, errNotRunning(id) } + if ctr.IsRestarting() { + return nil, errContainerIsRestarting(id) + } + // Check the container ipc is shareable if st, err := os.Stat(ctr.ShmPath); err != nil || !st.IsDir() { if err == nil || os.IsNotExist(err) { @@ -83,26 +87,19 @@ func (daemon *Daemon) getIpcContainer(id string) (*container.Container, error) { } func (daemon *Daemon) getPidContainer(ctr *container.Container) (*container.Container, error) { - containerID := ctr.HostConfig.PidMode.Container() - ctr, err := daemon.GetContainer(containerID) + id := ctr.HostConfig.PidMode.Container() + ctr, err := daemon.GetContainer(id) if err != nil { - return nil, errors.Wrapf(err, "cannot join PID of a non running container: %s", containerID) + return nil, errors.Wrapf(err, "cannot join PID of a non running container: %s", id) + } + if !ctr.IsRunning() { + return nil, errNotRunning(id) + } + if ctr.IsRestarting() { + return nil, errContainerIsRestarting(id) } - return ctr, daemon.checkContainer(ctr, containerIsRunning, containerIsNotRestarting) -} -func containerIsRunning(c *container.Container) error { - if !c.IsRunning() { - return errdefs.Conflict(errors.Errorf("container %s is not running", c.ID)) - } - return nil -} - -func containerIsNotRestarting(c *container.Container) error { - if c.IsRestarting() { - return errContainerIsRestarting(c.ID) - } - return nil + return ctr, nil } func (daemon *Daemon) setupIpcDirs(c *container.Container) error {