Resume Paused Docker Containers with docker container unpause

Someone froze a container with docker container pause, and now it is your job to thaw it without breaking anything. This guide gives you a repeatable way to resume every process in one or more paused containers, then check that each one is back in the running state. The examples use Docker CLI 29.8.1 from docker-ce-cli 5:29.8.1-1~ubuntu.24.04~noble.

Warning: this command changes live workload state. Do it in a maintenance window, or after confirming that resuming the workload is safe.

1. Check the installed command

Confirm the client version and the exact command shape first. These are ordinary, read-only checks and normally need no elevated privileges:

$ docker --version
Docker version 29.8.1, build 4a63305
$ docker container unpause --help
Usage:  docker container unpause CONTAINER [CONTAINER...]

Unpause all processes within one or more containers

The command takes one or more container names or IDs. The short alias docker unpause is also available, but the full docker container unpause form makes the object being changed clear in scripts and runbooks.

Checkpoint: if the help output does not show this command, stop and check which Docker CLI is first in your PATH. Do not install another client just to make a copied example work.

2. Find the paused container

List paused containers without changing them. The daemon handles the filter, so you need a daemon connection and suitable socket permission:

$ docker container ls --filter status=paused
CONTAINER ID   IMAGE        COMMAND               CREATED        STATUS                  PORTS     NAMES
abc123def456   example/app  "/usr/local/bin/app"  2 hours ago    Up 2 hours (Paused)               reporting-app

Your columns and values will differ. Use the value in the NAMES column or the full container ID in the next step.

Tip: if the list is empty, there is nothing for unpause to resume. A stopped or exited container is not a paused container, and unpause will not start it.

Security warning: if the command reports a permission error, first check that your account is allowed to access Docker. Adding yourself to the docker group grants broad control over the host, so treat that as a security-sensitive administrator decision. Using sudo may select a different Docker context or configuration, so do not use it reflexively.

3. Confirm the target before resuming it

Inspect the container's status using its exact name or ID. This is another read-only check:

$ CONTAINER_NAME='reporting-app'
$ docker container inspect --format '{{.State.Status}}' "$CONTAINER_NAME"
paused

Replace reporting-app with the value you found. If the result is not paused, stop. A container that has already resumed may need no action, while a stopped container needs a different operational decision.

Warning: do not paste an untrusted value into an unquoted shell command. The quotes around "$CONTAINER_NAME" keep whitespace and shell metacharacters from changing how the command is parsed.

4. Resume one container

When the target and timing are confirmed, run the state-changing command:

$ docker container unpause "$CONTAINER_NAME"

Use the command's exit status as the first check, not any text it prints. The local command un-suspends all processes in the selected container. On Linux, Docker implements this through the freezer cgroup.

Tip: resuming is not a restart. Existing processes continue from their paused state, and the container's filesystem, process IDs and network configuration are not recreated. Workloads may immediately consume CPU, handle queued timers or accept traffic again, so watch the service if the pause was part of an incident response.

5. Verify the resulting state

Ask Docker for the state after the command returns:

$ docker container inspect --format '{{.State.Status}}' "$CONTAINER_NAME"
running

Checkpoint: running is the expected state for a successfully resumed container.

For several targets, verify each one explicitly:

$ for container in reporting-app worker-app; do
>   printf '%s: ' "$container"
>   docker container inspect --format '{{.State.Status}}' "$container"
> done
reporting-app: running
worker-app: running

A successful command for one container does not prove that every name in a multi-container request was valid. Check the complete set when the operation matters.

6. Resume several containers in one request

Once you have reviewed all targets, pass them as separate arguments:

$ docker container unpause reporting-app worker-app

Do not turn a list of names into one comma-separated argument. Use shell quoting for names that contain whitespace, although simple names are normally easier to audit. If one target is wrong, correct the target list and verify every container afterwards rather than assuming the whole request had the desired result.

7. Recover if resuming was premature

There is no undo option on unpause, because it changes the live process state and then returns. If you resumed the wrong container and it is safe to pause it again, the matching command is:

$ docker container pause "$CONTAINER_NAME"
$ docker container inspect --format '{{.State.Status}}' "$CONTAINER_NAME"
paused

Warning: pausing is also service-disrupting. It freezes processes rather than shutting them down, so use it only after checking the operational impact. If the container was supposed to remain running, do not blindly pause it as a reversal. Investigate the workload, notify the owner if required, and leave the container in the state your recovery plan specifies.

Common traps

Done means