Your Express API crashes in prod — intermittent ECONNRESET. Locally, nothing. On Railway, logs show the error but not upstream socket. On Docker Compose staging, you reproduce with docker exec and tcpdump. Junior asks: "Migrate all PaaS or all Docker?"
Answer depends where you lose time today — not twelve-factor dogma.
PaaS: debug via vendor observability
Advantages: aggregated logs, basic metrics, one-click deploy rollback, no OS to patch.
Debug limits: limited or absent shell, ephemeral filesystem (lost core dumps), imposed timeouts (30 s, 60 s), "works on my machine" if buildpack ≠ local Dockerfile.
Railway, Render, Clever Cloud, Heroku — same trade-off.
Docker: debug via container control
Advantages: docker logs, exec, same local/prod image, pinned Node, CI repro, tcpdump and custom sysctl on VPS.
Limits: you assemble compose, network, secrets; scattered logs without Loki or ELK; bad Dockerfile = fragile prod.
Debug decision table
| Situation | Lean PaaS | Lean Docker VPS |
|---|---|---|
| Team without ops | ✓ | |
| Obscure network incidents | ✓ | |
| PR preview env | ✓ | Possible CI |
| Long WebSocket | Check plan | ✓ |
| Tight long-term budget | ✓ often |
Common indispensable practices
Source maps uploaded in prod (Sentry). Correlation ID per request. /health healthcheck + separate readiness. Staging = same image digest as prod. Without this, PaaS and Docker struggle equally.
The climax: PaaS opacity is not the enemy — irreproducibility is
Measure mean incident resolution time over six months before migrating.
Decide and move forward without blind spots
Instrument Sentry or OpenTelemetry before changing hosting. Fix one repro command (docker compose up or railway run). Document timeouts and WebSocket requirements. Compare PaaS and VPS via directory and comparator.
Frequently asked questions
Where to see real stack traces in prod?
PaaS: log dashboard + APM if enabled. Docker: container logs + file on volume — but source maps and NODE_ENV must align. Both require Sentry or OpenTelemetry for request context.
Does Docker reproduce prod better locally?
Yes if same image/tag, same variables, and prod-like compose. PaaS reproduces via buildpack containers — sometimes diverges from M1 Mac without architecture attention.
Free or cheap Node PaaS traps?
Dyno sleep, ephemeral filesystem, short request timeout, no long WebSocket — classic "works locally" bugs.
When does Docker on VPS beat PaaS for debug?
Low-level network incidents, strace/tcpdump need, exotic Node versions, or long log retention cost without vendor surcharge.
Node PaaS or Docker: choose where staging lies least — not the prettiest log console.
