Files
moby/client
Paweł Gronowski 99c1a9c778 daemon: Add configurable default container stop timeout
A container that defines no stop timeout of its own always got 10
seconds on Linux, or 30 on Windows, to shut down before being killed.
The value was a constant in the container package, so operators who
wanted a different grace period had to pass `--stop-timeout` on every
container.

Add a `default-stop-timeout` daemon flag and configuration file option
that supplies that fallback. Stopping a container, killing it, and
computing the daemon shutdown timeout take the value from the daemon
configuration when the container has no timeout of its own, so an
explicit per-container timeout still wins and the container
configuration itself stays untouched. The option can be reloaded, and
negative values are rejected.

mergo cannot tell an unset option from a zero value, so a configured
timeout of `0`, meaning "kill immediately", would be replaced by the
non-zero flag default while merging. Remember whether the
configuration file set the option, and restore its value after the
merge.

`ContainerConfig.StopTimeout` in the API documentation no longer
claims a fixed default of 10 seconds, because the fallback is now
whatever `default-stop-timeout` holds.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-07-27 14:15:55 +02:00
..
2025-07-21 09:30:05 -07:00
2026-03-12 18:53:41 +01:00
2026-06-11 19:37:35 +02:00
2026-01-26 20:14:43 +08:00
2026-01-26 20:14:43 +08:00
2026-03-12 18:53:41 +01:00
2026-01-24 17:15:45 +01:00
2026-03-12 18:53:41 +01:00
2026-03-14 19:30:07 +01:00
2026-07-03 19:02:58 +02:00
2026-07-03 19:02:58 +02:00
2025-11-12 17:53:36 +01:00
2025-12-05 15:57:55 +01:00
2025-10-08 12:06:31 -04:00
2025-11-12 17:53:36 +01:00
2025-11-12 17:53:36 +01:00
2025-11-27 12:05:27 +01:00
2025-11-12 17:53:36 +01:00
2025-11-12 17:53:36 +01:00
2026-07-09 09:59:25 +02:00
2026-03-12 18:53:41 +01:00
2025-11-12 17:53:36 +01:00
2025-11-12 17:53:36 +01:00
2026-04-01 13:57:15 +02:00

Go client for the Docker Engine API

PkgGoDev GitHub License OpenSSF Scorecard OpenSSF Best Practices

The docker command uses this package to communicate with the daemon. It can also be used by your own Go applications to do anything the command-line interface does; running containers, pulling or pushing images, etc.

For example, to list all containers (the equivalent of docker ps --all):

package main

import (
	"context"
	"fmt"

	"github.com/moby/moby/client"
)

func main() {
	// Create a new client with "client.FromEnv" (configuring the client
	// from commonly used environment variables such as DOCKER_HOST and
	// DOCKER_API_VERSION) and set a custom User-Agent.
	//
	// API-version negotiation is enabled by default to allow downgrading
	// the API version when connecting with an older daemon version.
	apiClient, err := client.New(
		client.FromEnv,
		client.WithUserAgent("my-application/1.0.0"),
	)
	if err != nil {
		panic(err)
	}
	defer apiClient.Close()

	// List all containers (both stopped and running).
	result, err := apiClient.ContainerList(context.Background(), client.ContainerListOptions{
		All: true,
	})
	if err != nil {
		panic(err)
	}

	// Print each container's ID, status and the image it was created from.
	fmt.Printf("%s  %-22s  %s\n", "ID", "STATUS", "IMAGE")
	for _, ctr := range result.Items {
		fmt.Printf("%s  %-22s  %s\n", ctr.ID, ctr.Status, ctr.Image)
	}
}

Full documentation is available on pkg.go.dev.