From 0e87588bbb2482f9635a19ac43be1c0ee9652ac2 Mon Sep 17 00:00:00 2001 From: Lei Jitang Date: Thu, 27 Apr 2017 11:26:51 -0400 Subject: [PATCH] Enable inspect exec if container is pause/restarting/non-running if docker exec exit and at the same the the container is pause, there could be a chance the `docker exec exit` will fail ``` $ docker exec -ti 388c7f47a06c sh / # exit Error response from daemon: Container 388c7f47a06cce0856266ffd56a2ce2901689ca7a6b9cd741b37652418448f2b is paused, unpause the container before exec ``` To reproduce this error easilly, we can add a sleep in `containerPause` ``` --- a/daemon/pause.go +++ b/daemon/pause.go @@ -2,6 +2,7 @@ package daemon import ( "fmt" + "time" "github.com/docker/docker/container" ) @@ -25,7 +26,7 @@ func (daemon *Daemon) ContainerPause(name string) error { func (daemon *Daemon) containerPause(container *container.Container) error { container.Lock() defer container.Unlock() - + time.Sleep(time.Second * 5) // We cannot Pause the container which is not running if !container.Running { return errNotRunning{container.ID} ``` Signed-off-by: Lei Jitang --- daemon/inspect.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/daemon/inspect.go b/daemon/inspect.go index 06858223f5..908a757340 100644 --- a/daemon/inspect.go +++ b/daemon/inspect.go @@ -196,9 +196,13 @@ func (daemon *Daemon) getInspectData(container *container.Container) (*types.Con // ContainerExecInspect returns low-level information about the exec // command. An error is returned if the exec cannot be found. func (daemon *Daemon) ContainerExecInspect(id string) (*backend.ExecInspect, error) { - e, err := daemon.getExecConfig(id) - if err != nil { - return nil, err + e := daemon.execCommands.Get(id) + if e == nil { + return nil, errExecNotFound(id) + } + + if container := daemon.containers.Get(e.ContainerID); container == nil { + return nil, errExecNotFound(id) } pc := inspectExecProcessConfig(e)