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. 1.Application crash - Application threw unhandled exception
  2. 2.Missing dependency - Required service or file not available
  3. 3.Out of memory - Container exceeded memory limit
  4. 4.Configuration error - Invalid environment variables or config
  5. 5.Missing command - Entrypoint or command not found
  6. 6.Permission denied - Insufficient permissions to run
  7. 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

CheckCommandExpected
Container statusdocker ps -aRunning
Exit codedocker inspect0
Logsdocker logsNo errors
Resourcesdocker statsWithin limits
Configurationdocker inspectCorrect
Networkdocker networkConnected

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 ```

  • [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)