Lesson 13 · Senior containers & local dev
Debugging local stacks under pressure
A senior debugging frame for local containers: image, config, readiness, process, and restart paths — checked in the right order.
Your win: debug a broken local service systematically instead of flailing between Docker, configs, and restarts at random.
Why local failures feel more mysterious than they are
A service “doesn’t work” can mean the wrong binary was copied, the wrong config was rendered, the secret mount is missing, the dependency gate never went healthy, the entrypoint is wrong, or the change never landed in the running process.
From the outside, those can all feel similar. That is why local debugging gets noisy so quickly if you do not first decide which layer is most likely false.
Why this order saves time
If a config file never mounted, no amount of app-level debugging will help. If the service never passed the readiness gate, the bug is upstream. If the changed binary never landed, the app logs can mislead you because you are staring at old code.
The order matters because later layers often depend on earlier ones already being true. That is the calm, senior habit this lesson is trying to build.
local/run.bash, deployments/sk.bash, the compose files, and the Dockerfile together define the whole local path. That means they also define the debugging checkpoints: what image started, what command ran, what configs mounted, what gate passed, and what reload path actually executed.
Repo scripts as debugging maps
These are not just startup scripts; they are the shortest honest representation of the local execution path. Read them like a map, not a magic spell.
→ local/run.bash
→ deployments/sk.bash
→ local/docker-compose.service.macos.yaml
Check yourself (from memory)
Q1. The best first move in a local-stack debug session is usually to…
Sources. In-repo local-runtime files.