66 "github.com/fsouza/go-dockerclient"
77 "github.com/fsouza/go-dockerclient/engine"
88 "io/ioutil"
9- "log"
109 "os"
1110 "path/filepath"
1211 "strconv"
@@ -53,7 +52,7 @@ func lookupContainer(containerName string, client *docker.Client, waitForContain
5352 return containerLookupResult {container , nil }
5453 }
5554 }
56- return containerLookupResult {nil , fmt .Errorf ("Container not active" )}
55+ return containerLookupResult {nil , fmt .Errorf ("container not active" )}
5756}
5857
5958func GetConnection (dockerSocket string ) (* DockerClient , error ) {
@@ -78,6 +77,16 @@ func GetConnection(dockerSocket string) (*DockerClient, error) {
7877 return & DockerClient {client , executionDriver }, nil
7978}
8079
80+ var ErrNoSuchContainer = errors .New ("can't find container" )
81+
82+ func (d * DockerClient ) InspectContainer (containerName string ) (* docker.Container , error ) {
83+ c , err := d .client .InspectContainer (containerName )
84+ if err != nil && strings .HasPrefix (err .Error (), "No such container" ) {
85+ err = ErrNoSuchContainer
86+ }
87+ return c , err
88+ }
89+
8190func (d * DockerClient ) GetContainer (containerName string , waitForContainer bool ) (* docker.Container , error ) {
8291 timeoutChannel := make (chan containerLookupResult , 1 )
8392 var container * docker.Container
@@ -89,7 +98,7 @@ func (d *DockerClient) GetContainer(containerName string, waitForContainer bool)
8998 }
9099 container = cInfo .Container
91100 case <- time .After (time .Minute ):
92- return nil , fmt .Errorf ("Timeout waiting for container" )
101+ return nil , fmt .Errorf ("timeout waiting for container" )
93102 }
94103
95104 return container , nil
@@ -120,11 +129,11 @@ func (d *DockerClient) GetContainerIPs(ids []string) (map[string]string, error)
120129}
121130
122131func (d * DockerClient ) ChildProcessForContainer (container * docker.Container ) (int , error ) {
123- log .Printf ("docker: execution driver %s" , d .executionDriver )
132+ // log.Printf("docker: execution driver %s", d.executionDriver)
124133 if d .executionDriver == "" || strings .HasPrefix (d .executionDriver , "lxc" ) {
125134 //Parent pid (LXC or N-Spawn)
126135 ppid := strconv .Itoa (container .State .Pid )
127- log .Printf ("docker: parent pid %s" , ppid )
136+ // log.Printf("docker: parent pid %s", ppid)
128137
129138 //Lookup any child of parent pid
130139 files , _ := filepath .Glob (filepath .Join ("/proc" , "*" , "stat" ))
@@ -147,7 +156,7 @@ func (d *DockerClient) ChildProcessForContainer(container *docker.Container) (in
147156 if container .State .Pid != 0 {
148157 return container .State .Pid , nil
149158 }
150- return 0 , fmt .Errorf ("Container not found" )
159+ return 0 , fmt .Errorf ("unable to find child process for container %s - race condition with Docker?" , container . ID )
151160 }
152- return 0 , errors . New ( fmt .Sprintf ( "Unable to find child process for container" , container .ID ) )
161+ return 0 , fmt .Errorf ( "unable to find child process for container %s " , container .ID )
153162}
0 commit comments