The outage that teaches you deployment

A service passes every test locally. It fails in staging because the API calls localhost:5432 for Postgres — but Postgres is in another container, reachable only as db:5432.

This is not a Docker problem. It is a boundary problem: your code assumed an environment it does not own.

Engineers who have shipped on AWS Lambda already avoid a class of these mistakes. They never SSH into a function to hot-fix. They inject config at deploy time. They treat each invocation as disposable. Containers reward the same discipline with different vocabulary.

This article maps what transfers, what breaks, and what I require before any Python backend goes to production in a container.