Docker & ContainersXXXIII Β· Incident ResponseCommunication
Communication β roles, cadence, and the channel as the record
What you'll learn
- Separate the incident commander role from the person operating the system
- Write a status update that does not speculate about cause
- Keep a contemporaneous timeline that the postmortem can use directly
Prerequisites
Verified against Docker Engine 29.x Β· Docker Engine 28.x Β· Docker Compose 2.x Β· containerd 2.x Β· runc 1.2.x Β· BuildKit 0.20+ Β· Linux kernel 5.15+ Β· Ubuntu 24.04 LTS Β· Debian 12 (Bookworm) Β· 2026-08-11
An incident with good communication and mediocre debugging usually ends better than the reverse. The reason is arithmetic: the outage lasts as long as the slowest step, and in most incidents the slowest step is somebody waiting for information, duplicating work, or undoing what a colleague just did.
This lesson is about the structure that prevents that. It is not soft-skills material β it is the part of the response that determines whether five people are one team or five simultaneous investigations.
Roles, and the one separation that matters
| Role | Owns | Does not |
|---|---|---|
| Incident commander | decisions, priorities, who does what | debug, type commands |
| Operations lead | the terminal, the changes | decide scope, talk to stakeholders |
| Communications lead | stakeholder and customer updates | change anything |
| Scribe | the timeline, in UTC | anything else |
On a team of three these collapse. One person can be commander and scribe. One separation must survive every collapse: the incident commander is not the person with their hands in the terminal.
The reason is attention. Debugging is deep focus; commanding is breadth β noticing that thirty minutes have passed, that the second theory has not been tested, that nobody has told support. A person doing both does the debugging and silently stops doing the other, and nobody notices until the incident review.
If you are alone, be explicit about switching hats. Set a timer for fifteen minutes; when it fires, stop typing and ask the commander questions out loud: what is the impact now, has it changed, who has not been told, what is the next thing to try if this one fails.
Cadence beats detail
Pick an interval by severity and hold it, including when there is nothing to report.
| Severity | Update interval | Audience |
|---|---|---|
| Total outage, all users | 15 minutes | internal channel plus status page |
| Major degradation | 30 minutes | internal channel plus status page |
| Partial or single-tenant | 60 minutes | internal channel, stakeholder on request |
| Internal only, no user impact | at resolution | internal channel |
βNo change, still investigating, next update at 10:45β is a complete and useful update. It tells everyone the incident is still owned, and it buys thirty minutes of uninterrupted work β which is the actual purpose. A team that updates unpredictably gets asked for updates constantly, and every one of those questions costs the responder more than the update would have.
What an update contains
10:15 UTC β INC-4471 β checkout API errors
IMPACT Roughly 40% of checkout requests returning 500 since 09:52 UTC.
Browsing and login unaffected. No data loss identified.
STATUS Traffic removed from host-b at 10:04; error rate down to ~8%.
Investigating why the api container on host-b is unhealthy.
NEXT Capturing container state, then restarting the container on host-b.
UPDATE 10:45 UTC.
IC @nadia OPS @tomas COMMS @priyaFour elements, in that order, every time. Impact first because it is what everyone is actually asking. Next-update time last because it is what stops them asking again.
The external version is shorter, in user language, and says less:
Investigating β Some customers may see errors when completing a purchase.
Browsing and account access are working normally. We are investigating
and will update by 10:45 UTC.The channel is the timeline
The postmortem needs a minute-by-minute account. Reconstructing one from memory two days later produces a document that is confidently wrong about the order of events β and the order of events is usually where the lesson is.
The cheap fix is to paste the actual commands and their actual output into the channel as you run them.
$ docker inspect proj-api-1 --format 'status={{.State.Status}} health={{.State.Health.Status}} restarts={{.RestartCount}}'status=running health=unhealthy restarts=0Illustrative output
That message is simultaneously an update, a piece of evidence, and a timestamped timeline entry. It costs nothing extra β you ran the command anyway β and it removes the βwhat time did we notice it was unhealthyβ question from the review entirely.
Docker gives you a second, independent timeline for free:
docker events \
--since '2026-08-11T09:30:00Z' \
--until '2026-08-11T10:30:00Z' \
--format '{{.Time}} {{.Type}} {{.Action}} {{.Actor.Attributes.name}}'The daemon records every start, stop, die, kill, health status change and network connect with a timestamp. Export that window into the incident record. It is authoritative about what happened to containers in a way that no human recollection is, and it frequently contradicts the story everyone remembers.
Handoff
Incidents outlive shifts. A handoff that is a summary loses the detail; a handoff that is a transcript loses the shape. Do both:
- State the current impact in one sentence, in user terms, with a number.
- State what is confirmed, and separately what is suspected. Keep the two lists distinct.
- List every change made so far and whether it has been reversed β containment actions especially, since an un-reversed
docker update --restart=nowill confuse the next person badly. - Name the next action and the reason it is next.
- Hand over the roles explicitly and by name, in the channel, and wait for the incoming person to acknowledge in writing.
- Stay for ten minutes after the handoff. Most of what the outgoing person knows turns out to be un-written and surfaces in questions.
Sanity check
Knowledge check Β· 4 questions
Q1. On a small team, which role separation should survive even when one person holds several roles?
Q2. Twenty minutes into a major incident there is no new information. What should the 30-minute update say?
Q3. Which of these belong in an internal incident update? Select all that apply.
Q4. docker events over the incident window gives an authoritative timeline of container starts, deaths and health status changes that can be exported into the incident record.
Passing score: 75%. Answers are checked in this browser.