Alter task history retention inside the Docker Swarm cluster to ensure that there are no stopped containers.
By default, task history retention is set to 5.
$ docker node ps --filter "name=blog_staging" swarm-cerberus
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS ormho76nb30u blog_staging.2 registry.example.com/websites/blog:staging swarm-cerberus Running Running 14 minutes ago ttrmtuh5xpv4 \_ blog_staging.2 registry.example.com/websites/blog:staging swarm-cerberus Shutdown Shutdown 16 minutes ago p2of726hvvbg \_ blog_staging.2 registry.example.com/websites/blog:staging swarm-cerberus Shutdown Shutdown 15 hours ago nvk4xr78td9m \_ blog_staging.2 registry.example.com/websites/blog:staging swarm-cerberus Shutdown Shutdown 38 hours ago a0n2lcmhjx6f \_ blog_staging.2 registry.example.com/websites/blog:staging swarm-cerberus Shutdown Shutdown 38 hours ago
Task history retention can be changed globally.
$ docker swarm update --help
Usage: docker swarm update [OPTIONS] Update the swarm Options: --autolock Change manager autolocking setting (true|false) --cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s) --dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s) --external-ca external-ca Specifications of one or more certificate signing endpoints --max-snapshots uint Number of additional Raft snapshots to retain --snapshot-interval uint Number of log entries between Raft snapshots (default 10000) --task-history-limit int Task history retention limit (default 5)
Set task history retention to **** to disable it.
This change will not be applied immediately. You need to update the service to see the difference.
$ docker swarm update --task-history-limit 0
Swarm updated.
Update service to reapply task history retention.
$ docker service update --with-registry-auth --image registry.example.com/websites/blog:staging blog_staging | grep ^verify:\ Service"
verify: Service converged
There are no stopped containers.
$ docker node ps --filter "name=blog_staging" swarm-cerberus
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS lqblu9mgjhxl blog_staging.2 registry.example.com/websites/blog:staging swarm-cerberus Running Preparing 49 seconds ago
Additional information
You can set this option during swarm initialization.
$ docker swarm init --help
Usage: docker swarm init [OPTIONS] Initialize a swarm Options: --advertise-addr string Advertised address (format: <ip|interface>[:port]) --autolock Enable manager autolocking (requiring an unlock key to start a stopped manager) --availability string Availability of the node ("active"|"pause"|"drain") (default "active") --cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s) --data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>) --data-path-port uint32 Port number to use for data path traffic (1024 - 49151). If no value is set or is set to 0, the default port (4789) is used. --default-addr-pool ipNetSlice default address pool in CIDR format (default []) --default-addr-pool-mask-length uint32 default address pool subnet mask length (default 24) --dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s) --external-ca external-ca Specifications of one or more certificate signing endpoints --force-new-cluster Force create a new cluster from current state --listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377) --max-snapshots uint Number of additional Raft snapshots to retain --snapshot-interval uint Number of log entries between Raft snapshots (default 10000) --task-history-limit int Task history retention limit (default 5)