Learn how to use docker exec to run commands, access interactive shells, debug issues, inspect filesystems, and manage running Docker containers without stopping or restarting them — a must-have skill for every Docker developer and DevOps engineer in 2025–2026.
This step-by-step guide covers everything you need to use docker exec effectively: basic syntax, interactive shells, non-interactive commands, working with different users/directories, passing environment variables, common errors, best practices, and real-world examples.
Key Takeaways – How to Use docker exec
- Use docker exec to execute any command inside a running container (won’t work on stopped/paused containers).
- Add -it flags for an interactive shell (docker exec -it container-name bash).
- Run one-off commands without a shell: docker exec container-name ls /app.
- Control execution context with –user, –workdir, -e, and –env-file.
- Combine with docker ps, docker logs, and docker inspect for full container debugging.
- Use cautiously — resource-heavy commands inside containers can impact performance.
Prerequisites
- Docker installed and running (Docker Engine or Docker Desktop)
- At least one running container (we’ll create a test one below)
- Basic familiarity with docker ps, docker run, and shell commands
Step 1: Start a Test Container
If you don’t have a running container, start one now:
docker run -d --name date-logger alpine watch "date >> /var/log/date.log"
This creates a background container named date-logger that appends the current date/time to a log file every 2 seconds (Alpine’s watch command).
Verify it’s running:
docker ps
Step 2: How to Use docker exec – Basic Non-Interactive Commands
Run a single command and get its output immediately:
docker exec date-logger tail -n 5 /var/log/date.log
Example output:
Wed Jul 2 14:35:12 UTC 2025
Wed Jul 2 14:35:14 UTC 2025
Wed Jul 2 14:35:16 UTC 2025
Wed Jul 2 14:35:18 UTC 2025
Wed Jul 2 14:35:20 UTC 2025
Step 3: How to Use docker exec for an Interactive Shell
Most common use case — drop into a shell inside the container:
docker exec -it date-logger sh
Inside the container shell:
# Run commands as if you're inside the container
ls /var/log
cat /var/log/date.log
whoami
exit
- -i → keep STDIN open (interactive)
- -t → allocate a pseudo-TTY (nice terminal formatting)
- Replace sh with bash if your image has bash installed
Step 4: Advanced docker exec Options
Run as a Different User
docker exec --user nobody date-logger whoami
# Output: nobody
Run in a Specific Directory
docker exec --workdir /var/log date-logger pwd
# Output: /var/log
Pass Environment Variables
Single variable:
docker exec -e MY_VAR=hello date-logger env | grep MY_VAR
# Output: MY_VAR=hello
Multiple variables from a file (myenv.env):
MY_VAR=hello
APP_ENV=prod
docker exec --env-file myenv.env date-logger env
Step 5: Real-World Examples – How to Use docker exec
- Check disk usage inside container:
docker exec -it my-app df -h
- View running processes:
docker exec -it my-app ps aux
- Install a package temporarily (not saved after container stops):
docker exec -it ubuntu-container apt update && apt install -y vim
- Debug a Node.js app (see environment):
docker exec -it node-app env
- Tail logs in real time:
docker exec -it nginx tail -f /var/log/nginx/access.log
Common Errors & Fixes When Using docker exec
- Error: No such container → Wrong name/ID. Run docker ps -a to check.
- Error: Container is not running → Container stopped/paused. Start it: docker start container-name.
- Error: Permission denied → Run with sudo or add your user to docker group (sudo usermod -aG docker $USER + relogin).
- Error: OCI runtime exec failed → Shell (sh/bash) not present in image. Try docker exec -it container-name /bin/sh.
- No TTY / formatting issues → Forgot -t flag — always use -it for interactive shells.
How to Use docker exec – FAQ (2025–2026)
- What is the docker exec command used for?
Use docker exec to run any command or open a shell inside a running container. - How do I get an interactive shell with docker exec?
docker exec -it container-name bash or sh — the most common way to use docker exec. - Can I run docker exec on a stopped container?
No — container must be running. Start it first with docker start. - How do I run a command as root inside a container?
docker exec –user root container-name command — useful when you use docker exec for admin tasks. - What’s the difference between docker exec and docker run?
docker run starts a new container; use docker exec to work inside an existing running container. - How do I pass environment variables when using docker exec?
Use -e KEY=val or –env-file file.env — powerful when you use docker exec for debugging.
Summary
You now know exactly how to use docker exec to run commands, debug, inspect, and manage running Docker containers efficiently. From simple one-liners to interactive shells, user switching, working directories, and env vars — docker exec is one of Docker’s most powerful everyday tools.
Practice on test containers, combine with docker logs, docker inspect, and docker cp — and you’ll master container troubleshooting fast.
Recommended Resources
- Official Docker Exec Documentation
- Docker Debugging Cheat Sheet
- How to Debug Docker Containers Like a Pro
- Docker Best Practices 2025–2026