One application has two independent observation paths: health can fail while the metrics scrape succeeds.

Docker health and Prometheus up answer different questions

Docker health state and Prometheus’s up series are observations from different checks. A Compose healthcheck runs a command inside the application container. Prometheus independently scrapes a configured metrics endpoint and records whether that scrape succeeded. The two observations can legitimately disagree because an application may refuse useful work while still serving its metrics, or may serve work while its metrics endpoint is broken. ...

February 21, 2028 · 5 min · XB Field Notes
Matching inputs reuse a recorded RUN result. Changing file permissions or contents invalidates COPY and its dependent RUN in the source’s simple chain; changing mtime alone does not.

Docker rebuilds reuse recorded work, including stale work

Docker’s build cache stores results of build operations so a later build can reuse work whose relevant inputs still match. A cache hit does not mean the command ran again and produced identical output. It means the builder accepted an existing result. That distinction matters for package installation, generated timestamps, remote downloads, and any operation whose output could change without a corresponding change to its declared inputs. ...

February 20, 2028 · 5 min · XB Field Notes
ENTRYPOINT remains while the CMD default argument block marked with an X is replaced by runtime arguments.

ENTRYPOINT and CMD define defaults that operators can override

An image’s ENTRYPOINT and CMD contribute to the command used when a container is created. With an exec-form ENTRYPOINT, CMD commonly supplies default arguments appended to that entrypoint. Without an entrypoint, CMD can supply the executable and its arguments. These are startup defaults, not an enforcement boundary: an authorized operator can replace the entrypoint or arguments when creating a container. ...

October 3, 2027 · 6 min · XB Field Notes
The release tag moves to image two; the existing container and latest still select image one.

Image tags can move while existing containers keep their image

An image tag is a readable name associated with an image reference. Unless a registry policy prevents reassignment, the same tag can later identify another artifact. Tags such as v1.4 and latest differ in naming convention, not in an inherent guarantee of immutability. Reproducing a deployment requires recording the artifact actually selected, together with the platform and runtime configuration that determined its behavior. ...

August 24, 2027 · 5 min · XB Field Notes
Client and API share a project network; the state-volume branch survives the ordinary down operation that removes the network.

A Compose project combines declarations with external inputs

Docker Compose turns service declarations into containers, networks, and storage attachments managed as a project. The file describes useful relationships: which image runs a service, how configuration reaches it, and which storage or network it uses. Reproducing a stack still depends on external inputs such as image availability, variable values, host capabilities, and existing data. ...

August 18, 2027 · 6 min · XB Field Notes
Copying app.py before pip makes a source-only edit rerun installation. Copying dependency inputs first, installing, then copying app.py lets that installation result be reused.

Copy dependency inputs before application code

Dockerfile order determines which earlier inputs an expensive build operation depends on. If application source is copied before dependency installation, changing that source can make the installation run again even when the dependency declaration is unchanged. Copying the dependency inputs first, installing them, and copying application code afterward creates a smaller dependency boundary that matches the work the installer actually needs. ...

August 17, 2027 · 5 min · XB Field Notes
An earlier layer keeps file bytes while a later whiteout hides the path in the merged view.

Deleting a file in a later image layer does not erase its bytes

Container image layers describe filesystem changes applied in order. A layer can add or replace a file, or record that an earlier path should disappear from the merged filesystem. That final view is what a normal container process sees, but it is not the complete history of bytes distributed with the image. Inspecting only the running container can therefore miss data retained in earlier layers. ...

August 16, 2027 · 5 min · XB Field Notes
A continuous running-process bar spans changing health states: starting, unhealthy, healthy, unhealthy.

Docker healthchecks report a state; recovery needs a consumer

A Docker HEALTHCHECK runs a configured command inside a container and records the result as health state. It adds an observation beyond whether the main process is running. The meaning of that observation depends on what the command tests: a process check, an HTTP response, or an application-specific readiness condition. Docker does not infer a universal readiness contract from the presence of the instruction. ...

July 5, 2027 · 5 min · XB Field Notes