What's Actually Happening
Docker containers exit unexpectedly without completing their expected tasks. Containers show Exited status, applications stop running, or services become unavailable.
The Error You'll See
Container exited:
```bash docker ps -a
CONTAINER ID IMAGE STATUS NAMES abc123 myapp:latest Exited (1) 5 minutes ago myapp ```
Docker logs:
```bash docker logs myapp
Error: Cannot connect to database Application failed to start ```
Why This Happens
- 1.Application crash - Application threw unhandled exception
- 2.Missing dependency - Required service or file not available
- 3.Out of memory - Container exceeded memory limit
- 4.Configuration error - Invalid environment variables or config
- 5.Missing command - Entrypoint or command not found
- 6.Permission denied - Insufficient permissions to run
- 7.Health check failed - Container health check timeout
Step 1: Check Container Status
```bash docker ps -a
docker inspect myapp
docker inspect myapp | grep -A 10 State
docker inspect --format='{{.State.Status}}' myapp docker inspect --format='{{.State.ExitCode}}' myapp docker inspect --format='{{.State.Error}}' myapp ```
Step 2: Check Container Logs
```bash docker logs myapp
docker logs --tail 100 myapp
docker logs --follow myapp
docker logs --since 1h myapp
docker logs --timestamps myapp
# If container restarts: docker events --filter container=myapp ```
Step 3: Check Resource Limits
```bash docker stats --no-stream
docker inspect myapp | grep -A 10 Memory
docker inspect myapp | grep -A 10 Cpu
docker system df
# Check host resources: free -h df -h ```
Step 4: Check Application Configuration
```bash docker inspect myapp | grep -A 20 Config
docker inspect myapp | grep -A 10 Env
docker inspect --format='{{.Config.Env}}' myapp
docker inspect --format='{{.Config.Cmd}}' myapp
docker inspect --format='{{.Config.Entrypoint}}' myapp
docker exec myapp env ```
Step 5: Run Container Interactively
```bash docker run -it --entrypoint /bin/sh myapp:latest
docker run -it --rm myapp:latest /bin/bash
docker exec -it myapp /bin/sh
# Test command: docker run --rm myapp:latest python -c "print('test')" ```
Step 6: Check Health Check
```bash docker inspect myapp | grep -A 10 Health
docker inspect --format='{{.State.Health.Status}}' myapp
# Health check in Dockerfile: HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost/health || exit 1 ```
Step 7: Check Restart Policy
```bash docker inspect myapp | grep -A 5 RestartPolicy
docker update --restart always myapp
docker update --restart unless-stopped myapp
docker update --restart on-failure:5 myapp
docker update --restart no myapp ```
Step 8: Debug Container Startup
```bash # Start container with debug: docker run -it --rm --entrypoint /bin/sh myapp:latest
# Check if files exist: docker run --rm myapp:latest ls -la /app
# Check if command works: docker run --rm myapp:latest which python
# Check config files: docker run --rm myapp:latest cat /etc/config.yaml ```
Step 9: Check Network and Dependencies
```bash docker network ls
docker network inspect bridge
docker inspect myapp | grep -A 10 Networks
# Check if can reach dependencies: docker run --rm --network mynetwork myapp:latest ping db
docker run --rm myapp:latest nc -zv db 3306 ```
Step 10: Monitor Container Health
```bash # Watch container status: watch -n 5 docker ps -a
# Monitor logs: docker logs -f myapp
# Monitor resources: docker stats myapp
# Docker events: docker events --filter container=myapp
# Use Docker Prometheus metrics: curl http://localhost:9323/metrics ```
Docker Container Exited Checklist
| Check | Command | Expected |
|---|---|---|
| Container status | docker ps -a | Running |
| Exit code | docker inspect | 0 |
| Logs | docker logs | No errors |
| Resources | docker stats | Within limits |
| Configuration | docker inspect | Correct |
| Network | docker network | Connected |
Verify the Fix
```bash docker ps -a
docker logs myapp
docker inspect --format='{{.State.Status}}' myapp
docker stats --no-stream myapp
docker inspect --format='{{.State.ExitCode}}' myapp
docker logs --tail 20 myapp ```
Related Issues
- [Fix Docker Container Not Starting](/articles/fix-docker-container-not-starting)
- [Fix Docker Out of Memory](/articles/fix-docker-out-of-memory)
- [Fix Docker Image Not Found](/articles/fix-docker-image-not-found)