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.
The route
Jump straight to the step you need, or tick off Done means at the end.
- Time: about ten minutes.
- You need: a Docker daemon, permission to access its socket, and at least one container that is currently paused.
- What it will not do: restart the container or recreate it.
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.
- Still
paused? Check the command's exit status and Docker daemon logs before repeating it. - Container does not exist? Re-list containers and confirm the name or ID. Names can be reused after a container is removed, so do not act on a stale runbook value.
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
- No paused containers.
docker container ls --filter status=pausedreturns no rows. There is no unpause work to do. - Unknown container. The name or ID is wrong, or the container was removed. Re-list containers in the active Docker context.
- Permission denied. The current account cannot access the Docker socket. Resolve access through your normal administrator process, because elevated access is not automatically harmless.
- Wrong context or daemon. Docker CLI configuration can point at a different daemon. Check the context and endpoint before changing a similarly named container elsewhere.
- Still paused after the request. Capture the exit status and daemon-side diagnostics. Repeating a state change without knowing which daemon answered can make incident timelines harder to reconstruct.
Done means
- Command checked. The Docker CLI version and command syntax were confirmed.
- Targets confirmed. Every target was found and shown as
pausedbefore the change. - Reviewed request.
docker container unpausewas run with separate, reviewed names or IDs. - State verified. Each target was inspected afterwards and reported
running. - Reversal known. You know how to pause a mistakenly resumed container, with the service impact understood.