Restart a Stopped Container with docker container start

You ran docker container start because something you need is sitting there as "Exited", and you want it back without rebuilding anything. This guide gets an existing container running, proves which state it reached, and shows when attaching to its output is worth it. The examples use Docker CLI 29.8.1 from docker-ce-cli package version 5:29.8.1-1~ubuntu.24.04~noble.

Starting a container changes service state, so check the target before you run the command.

1. Confirm Docker and find the exact container

Check the client version, then list all containers, including stopped ones:

$ docker version --format '{{.Client.Version}}'
29.8.1
$ docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'
NAMES             STATUS                   IMAGE
inventory-db      Exited (0) 2 hours ago   postgres:16
inventory-web     Up 2 hours               example/inventory:2026.09

Checkpoint: the target is the stopped container you meant to restart. Do not rely on a familiar image name: several containers can share one image, while a container name identifies one specific object.

2. Start one stopped container

Start the named container as an ordinary user if your account can access Docker:

$ docker container start inventory-db
inventory-db

The normal output is the container name or ID, and a successful command returns status 0. That line is not proof the application inside is healthy, so verify the state:

$ docker ps --filter 'name=^inventory-db$' --format 'table {{.Names}}\t{{.Status}}'
NAMES          STATUS
inventory-db   Up 3 seconds

Checkpoint: a row for the intended container whose status begins with Up. The exact uptime will differ.

If the container stops immediately, inspect its logs and exit status before you start it again:

$ docker ps -a --filter 'name=^inventory-db$' --format 'table {{.Names}}\t{{.Status}}'
NAMES          STATUS
inventory-db   Exited (1) 2 seconds ago
$ docker logs --tail 50 inventory-db
<recent application output appears here>

Tip: starting it again is not a repair for a process that exits on every launch. Keep the logs and investigate the application configuration, dependencies or data separately.

3. Start several containers in one command

Pass multiple names or IDs when the containers are already configured and you have checked their order:

$ docker container start inventory-db inventory-cache inventory-worker
inventory-db
inventory-cache
inventory-worker

Docker processes the requested targets as one command, but this is not a dependency manager. A successful response for a name means Docker accepted the start request. It does not prove that the worker can already connect to the database or cache. Check all three afterwards:

$ docker ps --filter 'name=^inventory-' --format 'table {{.Names}}\t{{.Status}}'
NAMES             STATUS
inventory-db      Up 8 seconds
inventory-cache   Up 8 seconds
inventory-worker  Up 7 seconds

Warning: if one target is misspelled or unavailable, read the error and recheck the complete list. Do not copy a partial success into a deployment record as though every requested container started.

4. Attach only when you need the streams

By default, the command starts the container without attaching your terminal. Use --attach, or -a, to connect your terminal to the container's standard output and standard error:

$ docker container start --attach inventory-worker
worker: listening on 0.0.0.0:8080
worker: ready

Attaching suits a foreground check or a short-lived job. It can also leave you staring at a long-running service, and because signals get forwarded, terminal handling matters.

5. Fix permissions and recover from errors

Most installations permit the Docker client for users in the Docker group or through a rootless daemon. If the client reports a permission error connecting to the daemon, check the active context and daemon access without changing container state:

$ docker context show
default
$ docker info

Use sudo docker container start ... only when your host's Docker setup explicitly requires elevated access. Adding sudo changes which Docker configuration and context are used, so used reflexively it can hit the wrong daemon.

Security warning: a Docker group or socket grants substantial control over the host. Treat membership as a security decision.

To undo the state change made by this guide, stop only the container you started:

$ docker container stop inventory-db
inventory-db

That stops the container but keeps it available for another start.

Warning: do not use docker rm as a clean-up shortcut. Removing a container is a separate, potentially destructive action, and it can discard its writable layer. Do not run docker system prune while troubleshooting this command.

Done means