MCPcopy Index your code
hub / github.com/coder/coder / runDockerInspect

Function runDockerInspect

agent/agentcontainers/containers_dockercli.go:313–339  ·  view source on GitHub ↗

runDockerInspect is a helper function that runs `docker inspect` on the given container IDs and returns the parsed output. The stderr output is also returned for logging purposes.

(ctx context.Context, execer agentexec.Execer, ids ...string)

Source from the content-addressed store, hash-verified

311// container IDs and returns the parsed output.
312// The stderr output is also returned for logging purposes.
313func runDockerInspect(ctx context.Context, execer agentexec.Execer, ids ...string) (stdout, stderr []byte, err error) {
314 if ctx.Err() != nil {
315 // If the context is done, we don't want to run the command.
316 return []byte{}, []byte{}, ctx.Err()
317 }
318 var stdoutBuf, stderrBuf bytes.Buffer
319 cmd := execer.CommandContext(ctx, "docker", append([]string{"inspect"}, ids...)...)
320 cmd.Stdout = &stdoutBuf
321 cmd.Stderr = &stderrBuf
322 err = cmd.Run()
323 stdout = bytes.TrimSpace(stdoutBuf.Bytes())
324 stderr = bytes.TrimSpace(stderrBuf.Bytes())
325 if err != nil {
326 if ctx.Err() != nil {
327 // If the context was canceled while running the command,
328 // return the context error instead of the command error,
329 // which is likely to be "signal: killed".
330 return stdout, stderr, ctx.Err()
331 }
332 if bytes.Contains(stderr, []byte("No such object:")) {
333 // This can happen if a container is deleted between the time we check for its existence and the time we inspect it.
334 return stdout, stderr, nil
335 }
336 return stdout, stderr, err
337 }
338 return stdout, stderr, nil
339}
340
341// To avoid a direct dependency on the Docker API, we use the docker CLI
342// to fetch information about containers.

Callers 2

devcontainerEnvFunction · 0.85
ListMethod · 0.85

Calls 5

ErrMethod · 0.80
CommandContextMethod · 0.65
RunMethod · 0.65
BytesMethod · 0.45
ContainsMethod · 0.45

Tested by

no test coverage detected