@@ -311,21 +311,31 @@ func (dcli *dockerCLI) List(ctx context.Context) (codersdk.WorkspaceAgentListCon
311
311
// container IDs and returns the parsed output.
312
312
// The stderr output is also returned for logging purposes.
313
313
func runDockerInspect (ctx context.Context , execer agentexec.Execer , ids ... string ) (stdout , stderr []byte , err error ) {
314
- var stdoutBuf , stderrBuf bytes.Buffer
315
- cmd := execer .CommandContext (ctx , "docker" , append ([]string {"inspect" }, ids ... )... )
316
- cmd .Stdout = & stdoutBuf
317
- cmd .Stderr = & stderrBuf
318
- err = cmd .Run ()
319
- stdout = bytes .TrimSpace (stdoutBuf .Bytes ())
320
- stderr = bytes .TrimSpace (stderrBuf .Bytes ())
321
- if err != nil {
322
- if bytes .Contains (stderr , []byte ("No such object:" )) {
323
- // This can happen if a container is deleted between the time we check for its existence and the time we inspect it.
324
- return stdout , stderr , nil
314
+ select {
315
+ case <- ctx .Done ():
316
+ // If the context is done, we don't want to run the command.
317
+ return []byte {}, []byte {}, ctx .Err ()
318
+ default :
319
+ var stdoutBuf , stderrBuf bytes.Buffer
320
+ cmd := execer .CommandContext (ctx , "docker" , append ([]string {"inspect" }, ids ... )... )
321
+ cmd .Stdout = & stdoutBuf
322
+ cmd .Stderr = & stderrBuf
323
+ err = cmd .Run ()
324
+ stdout = bytes .TrimSpace (stdoutBuf .Bytes ())
325
+ stderr = bytes .TrimSpace (stderrBuf .Bytes ())
326
+ if err != nil {
327
+ if ctx .Err () != nil {
328
+ // If the context was canceled, we don't want to return an error.
329
+ return stdout , stderr , ctx .Err ()
330
+ }
331
+ if bytes .Contains (stderr , []byte ("No such object:" )) {
332
+ // This can happen if a container is deleted between the time we check for its existence and the time we inspect it.
333
+ return stdout , stderr , nil
334
+ }
335
+ return stdout , stderr , err
325
336
}
326
- return stdout , stderr , err
337
+ return stdout , stderr , nil
327
338
}
328
- return stdout , stderr , nil
329
339
}
330
340
331
341
// To avoid a direct dependency on the Docker API, we use the docker CLI
0 commit comments