Skip to main content

Docker Stop All Containers: A Step-by-Step Guide

Learn how to stop all running Docker containers using simple commands. This will help you manage system resources and streamline your Docker environment.
Jun 15, 2025  · 5 min read

Stopping containers one by one can slow down your development workflow and lead to errors when juggling microservices or multi-container applications. 

In this guide, I’ll cover several methods to help you terminate all running containers.

By the end of this tutorial, you’ll be able to:  

  • Understand how Docker handles signals and grace periods
  • Stop all containers using simple CLI techniques and filters
  • Leverage Docker Compose and custom aliases for streamlined workflows 

Understanding Docker Container Termination

Before stopping containers in bulk, it helps to understand how Docker orchestrates shutdowns under the hood.

Signal-based process management

Docker uses Unix signals to request graceful shutdowns before forcing termination. The default behavior of the docker stop command is: 

  1. Send SIGTERM to the container’s main process.  
  2. Wait up to 10 seconds (configurable with -t/--time).  
  3. Send SIGKILL if the process hasn’t exited.
  • SIGTERM: Politely asks the process to clean up and exit.  
  • Grace period: Gives applications time to flush logs, close connections, or save state.  
  • SIGKILL: Forces immediate termination of any unresponsive process.

Timeline illustrating Docker stop signal sequence: SIGTERM, waiting, then SIGKILL.

Command-line interface (CLI) mechanics

By default, docker stop handles one container at a time. You can extend it to stop multiple containers using shell features.

# Stop a single container named my_container
docker stop my_container

This sends SIGTERM to my_container and waits the default 10 seconds before issuing SIGKILL if needed.

# Stop all running containers at once
docker stop $(docker ps -q)

Here, docker ps -q lists the IDs of all running containers; those IDs are passed to docker stop, which shuts down the containers sequentially.

Terminal session piping docker ps -q into docker stop to shut down all containers.

Screenshot of a terminal showing docker ps -q output piped into docker stop

For a more detailed understanding of these concepts, consider exploring Containerization and Virtualization Concepts.

Comparing docker stop and docker kill

Choosing between graceful and forceful termination helps you avoid unintended consequences.

Graceful vs. immediate termination

Command

Signal(s)

Behavior

Use case

docker stop

SIGTERM → SIGKILL after timeout

Graceful shutdown with cleanup time

Routine maintenance or updates

docker kill

SIGKILL

Immediate termination  

Emergency remediation of hung containers

Signal customization

Both commands support a --signal flag to override defaults:

# Send SIGINT instead of SIGTERM
docker stop --signal=SIGINT my_container

The above lets processes trap SIGINT for custom cleanup.

# Kill all containers with SIGUSR1
docker kill --signal=SIGUSR1 $(docker ps -q)

As seen above, you can use custom signals when your application implements specific shutdown hooks.

Advanced Container Stopping Strategies

Filtering and automating container stopping allows for more precise DevOps workflows, especially in large-scale environments.  

Once you understand the basics, you can fine-tune which containers you stop and how you automate the process.

Filtered container termination

Filters let you target containers by attributes such as image name, status, or labels:

# Stop containers running the my_image:latest image
docker stop $(docker ps --filter "ancestor=my_image:latest" -q)

The above command stops only containers based on my_image:latest, providing targeted control in multi-service projects.

Use cases:  

  • Halt test containers by image tag (--filter "ancestor=test:latest")  
  • Stop containers by label (--filter "label=env=dev")

Filtering docker ps output by ancestor image name before stopping containers.

Terminal screenshot of docker ps --filter usage

Automated cleanup with Docker Compose

If your services are defined in a docker-compose.yml file, a single command stops all related containers:

docker-compose stop

This respects your service dependencies and configured timeouts for a clean shutdown.

For more advanced techniques, you might consider the Intermediate Docker course.

Alias-driven workflow optimization

For repetitive tasks, shell aliases reduce typing and context switching:

# Add this to ~/.bashrc or ~/.zshrc
alias ds='docker stop $(docker ps -q)'

Once you reload your shell, running ds stops all containers in one keystroke—ideal for quick cleanup.

Terminal showing the successful use of a custom 'ds' alias to stop all running Docker containers in Ubuntu WSL.

Using the 'ds' alias to stop all running containers in Ubuntu WSL

Operational Best Practices

Implement safe shutdown routines and regular cleanup to keep your environment stable and performant.

  • Implement signal handlers in your application code to close connections and flush logs.  
  • Reserve docker kill for emergency interventions; avoid data inconsistencies.  
  • Adjust grace periods (-t/--time) based on your application’s cleanup needs.  
  • Automate post-shutdown cleanup with commands like docker system prune, as detailed in Docker Prune: A Complete Guide with Hands-On Examples.
  • Log shutdown events (timestamps and exit codes) to diagnose termination issues.

Troubleshooting Common Issues

Even straightforward commands can run into snags—here’s how to address them.

Zombie processes and orphaned volumes

Forceful terminations may leave behind stale processes or orphaned volumes, consuming host resources and disk space. To clean up:

# Remove dangling volumes
docker volume prune

This deletes all volumes not referenced by any container.

Check for lingering Docker daemon processes:

ps aux | grep dockerd

Manually kill any stray dockerd child processes if they persist.

Real-world case: In one project, I used docker kill on a database container when a migration hung. The abrupt kill prevented the DB from flushing transaction logs, corrupting the InnoDB tables. We had to restore from backups and replay binlogs, costing over 30 minutes of downtime. To avoid this, prefer docker stop with an extended timeout or add proper SIGTERM handlers in your application.

Permission denied errors

Running Docker commands without the proper privileges often triggers errors:

  • Prepend commands with sudo or run as a user in the docker group.  
  • Add your user to the docker group and re-login:
sudo usermod -aG docker $USER

After logging out and back in, you can run Docker commands without sudo. In a CI environment, ensure the runner user has Docker group membership to avoid pipeline failures.

Windows-specific considerations

On Windows PowerShell, wrap subcommands in parentheses and run as Administrator:

docker stop (docker ps -q)

Launching PowerShell with elevated rights prevents firewall or access-control issues. If you see TLS handshake errors, verify that Docker Desktop’s daemon configuration matches your PowerShell environment.

Conclusion

Stopping all your Docker containers efficiently saves time, conserves resources, and minimizes human error in your development workflow. You can maintain a clean and predictable environment by understanding Docker’s signal handling, leveraging CLI filters, using Docker Compose, and crafting simple aliases. 

Explore the Containerization and Virtualization with Docker and Kubernetes track or the Intermediate Docker course to deepen your containerization expertise.

Happy containerizing—and here’s to clean, efficient Docker workflows!

Master Docker and Kubernetes

Learn the power of Docker and Kubernetes with an interactive track to build and deploy applications in modern environments.
Start Track for Free

FAQs

What exit code does docker stop return?

On success, docker stop returns 0. A non-zero exit code indicates one or more containers failed to stop.

Can I preview which containers will be stopped before running the command?

Yes—run docker ps or docker ps -q to list running containers and verify IDs or names before executing docker stop.

How do restart policies affect stopped containers?

Containers with a restart policy like always will restart automatically after stopping. Remove or modify the policy with docker update --restart=no <container> if you want them to remain stopped.

Is there a way to stop containers by network or volume?

While Docker doesn’t directly filter by network or volume on docker stop, you can combine docker ps --filter "network=<name>" or docker ps --filter "volume=<name>" with command substitution.

How can I integrate docker stop into a CI/CD pipeline?

Incorporate the stop command into your build scripts or CI jobs—use flags like --signal and filters for targeted shutdowns, then follow up with cleanup commands (docker system prune) in the same pipeline.

Can I restart all stopped containers afterward?

Yes, use docker start $(docker ps -a -q) to restart all containers, including previously stopped ones.

Will stopping all containers remove them?

No, stopping containers doesn't delete them. They remain on your system until you remove them with docker rm.

How can I automate stopping containers daily?

Use a cron job with the command docker stop $(docker ps -q) to schedule automatic stoppage.

Does docker stop affect volumes or networks?

No, stopping a container doesn't affect attached volumes or networks—they remain intact.

Can I exclude some containers from being stopped?

You can selectively stop containers by using docker ps with filters or excluding specific container IDs from the command.


Khalid Abdelaty's photo
Author
Khalid Abdelaty
LinkedIn

Data Engineer with Python and Azure cloud technologies expertise, specializing in building scalable data pipelines and ETL processes. Currently pursuing a B.S. in Computer Science at Tanta University. Certified DataCamp Data Engineer with demonstrated experience in data management and programming. Former Microsoft Data Engineer Intern at Digital Egypt Pioneers Initiative and Microsoft Beta Student Ambassador leading technical workshops and organizing hackathons.

Topics

Learn more about Docker with these courses!

Track

Containerization and Virtualization with Docker and Kubernetes

0 min
Learn the power of Docker and Kubernetes, this interactive track will allow you to build and deploy applications in modern environments.
See DetailsRight Arrow
Start Course
See MoreRight Arrow
Related

blog

Top 18 Docker Commands to Build, Run, and Manage Containers

This guide breaks down essential Docker commands—from container basics to volumes and networking—so you can confidently manage applications across environments!
Laiba Siddiqui's photo

Laiba Siddiqui

15 min

Tutorial

Docker for Beginners: A Practical Guide to Containers

This beginner-friendly tutorial covers the essentials of containerization, helping you build, run, and manage containers with hands-on examples.
Moez Ali's photo

Moez Ali

14 min

Tutorial

Run a Docker Image as a Container: A Practical Beginner’s Guide

This tutorial teaches you how to confidently run Docker images using docker run, with clear examples, practical tips, and troubleshooting advice.
Srujana Maddula's photo

Srujana Maddula

9 min

Tutorial

Docker Prune: A Complete Guide with Hands-On Examples

Remove unused containers, images, volumes, and networks safely with a single shell command. Keep your system tidy and reclaim disk space by removing unused Docker resources.
Dario Radečić's photo

Dario Radečić

11 min

Tutorial

Docker Compose Guide: Simplify Multi-Container Development

Master Docker Compose for efficient multi-container application development. Learn best practices, scaling, orchestration, and real-world examples.
Derrick Mwiti's photo

Derrick Mwiti

Tutorial

Docker Remove Image: How to Delete Unused and Dangling Images

This guide shows you exactly how to safely and effectively remove Docker images to reclaim disk space, avoid build clutter, and prevent storage-related errors!
Dario Radečić's photo

Dario Radečić

10 min

See MoreSee More