Chapter 33Lesson 03~170 minutes

Daemon Configuration, daemon.json, systemd, Proxies, Registry Mirrors, Live Restore, and Host Integration: Configuration, Design Choices, and Tradeoffs

Choose configuration ownership, proxy boundaries, registry trust, reload versus restart, live restore, and centralized host management from observable operational requirements.

PrecedenceReload vs restartTrustConfiguration managementTradeoffs

Learning objectives

  • Choose between daemon.json, service-manager flags/environment, and centralized configuration management without creating duplicate ownership.
  • Separate daemon proxy, client/container proxy, and external application proxy responsibilities.
  • Evaluate trusted mirrors, direct registry access, live restore, and restart strategies from trust and availability requirements.
  • Use Docker’s documented reloadable-option boundary rather than assuming SIGHUP applies every change.
  • Document prerequisites, affected state, expected evidence, and rollback for each host-level design decision.

1. Design rule: one authoritative owner per setting

A daemon setting needs one owner, a validated transition, and evidence-backed rollback
flowchart TD
  A[Proposed host policy] --> B{Who owns it?}
  B --> C[daemon.json]
  B --> D[systemd flags / environment]
  B --> E[external config management]
  C --> F{Reloadable now?}
  D --> F
  E --> F
  F -->|Yes| G[Validate + reload + verify]
  F -->|No| H[Maintenance / restart plan]
  G --> I[Evidence + rollback]
  H --> I
            

Configuration sprawl is the first operational risk. If systemd supplies a flag and JSON declares the same setting, Docker refuses the conflict. If a configuration-management agent writes JSON while an administrator also edits it manually, the next converge can silently undo the hand change.

For each setting, record owner (package/service manager, JSON, config-management system), scope (one daemon or fleet), secret sensitivity, reloadability, restart impact, and rollback source.

2. daemon.json versus startup flags/drop-ins

Choice Use when Advantages Risks / prerequisites
daemon.json Persistent Engine policy owned by Docker host configuration Central, readable, validates cleanly, portable across many Linux installs Must avoid duplicate CLI flags; some changes still require restart
systemd flags/drop-in Distribution/service-manager owns launch behavior or environment Explicit startup ownership; suitable for service environment Override syntax is easy to get wrong; unit files can leak credentials; daemon flags can conflict with JSON
central config management Fleet policy and auditability matter Versioned rollout, drift detection, approvals, rollback Needs staged validation and host-specific compatibility; “desired state” can amplify a bad config fleet-wide

3. Proxy design: three paths, three owners

Traffic Who initiates it? Configuration owner Security concern
Image pull/push, registry metadata dockerd daemon JSON/flags/service environment proxy credentials and CA trust on daemon host
Build dependency fetch build process / BuildKit worker build args, secrets, worker network/policy avoid embedding credentials in image history/build logs
Application HTTP request containerized app runtime config/secret provider least privilege; app should not inherit unnecessary host proxy credentials

4. Daemon-proxy precedence

Current Engine supports proxy settings in daemon.json, CLI flags, and environment variables. Docker documents that CLI/config-file values take precedence over startup environment variables. This is another reason to avoid scattering the same logical setting across layers: troubleshooting becomes a precedence puzzle.

For Docker Desktop, use Desktop’s supported proxy/settings interfaces; native Linux systemd examples do not describe the Desktop VM/service architecture.

5. Trusted mirror versus direct registry

Pattern Best fit Evidence Tradeoff
Direct registry Small environments or when upstream path is already reliable resolved digest, TLS identity, daemon logs more external egress; fewer moving parts
Trusted pull-through mirror Repeated Docker Hub pulls, controlled egress, local caching mirror policy + mirror logs + digest equality new availability/trust dependency; cache storage/retention required
Private registry with trusted CA Internal artifacts and policy CA chain, registry auth, digest/push/pull evidence certificate rotation and authorization administration
Insecure registry Disposable isolated development exception only when unavoidable explicit scope and expiry transport authenticity/confidentiality weakened; not a generic TLS fix

6. Registry mirrors do not change image identity rules

A mirror changes the transport/cache path, not the meaning of an image digest. Promotion and deployment decisions should still bind to an immutable digest. When troubleshooting a mirror, compare the resolved digest and platform manifest with expected upstream evidence instead of trusting a tag because the request was faster.

7. Reloadable versus restart-required policy

Docker currently documents a finite reloadable set: debug, labels, live restore, download/upload limits, download attempts, default runtime/runtimes, authorization plugins, insecure registries, registry mirrors, shutdown timeout, and feature settings. A change outside that list must not be assumed hot-reloadable.

The design implication is simple: every config review should classify the transition before deployment. A reload is an in-process policy update; a restart is a daemon lifecycle event with wider failure modes.

8. Live restore versus orchestrated restart

Choice Continuity goal What it handles What it does not replace
Live restore Keep eligible standalone Linux containers running during daemon outage/patch update daemon crash/outage and compatible patch upgrade when daemon options remain compatible application HA, Swarm control plane, incompatible config/storage/network changes
Orchestrated restart Move/restart services under a scheduler or maintenance plan controlled workload lifecycle and dependency ordering correct daemon config validation and host rollback
Normal daemon restart Simple host maintenance with accepted interruption restarts daemon and manages containers according to normal lifecycle continuity SLA without explicit design

9. Live restore has a logging backpressure edge

When dockerd is unavailable, it is not draining the container log FIFO. Docker documents a default 64 KiB buffer; a noisy process can eventually block when the buffer fills. Therefore “the process stays running” is not equivalent to “the application remains healthy indefinitely.”

A production live-restore plan should include bounded outage duration, application log behavior, external health checks, and a daemon-recovery objective.

10. Centralized configuration management: staged, not instant

Fleet management improves repeatability only if the rollout itself is safe. A robust pipeline renders host-specific config, runs dockerd --validate, checks conflicts with packaged flags, diffs secrets/redacted policy, applies to a canary host, verifies daemon/container/external state, and then expands gradually.

For restart-required changes, maintenance windows and workload drain/continuity become part of the change object. A fleet-wide push of invalid JSON is not “automation”; it is automated outage creation.

11. Data-root and storage changes are migrations, not edits

Chapter 32 established that Engine 29 can use multiple storage domains, especially with the containerd image store. Changing data-root or storage architecture requires an explicit migration/backup plan and cannot be safely taught as “edit JSON and restart.” The daemon configuration is only one part of the state transition.

12. Decision table

Scenario Recommended ownership/approach Prerequisites Evidence before approval
Corporate proxy for daemon pulls Versioned daemon proxy policy, secret-safe service/JSON config proxy reachability, CA trust, credential storage validated config, redacted proxy identity, bounded pull test, daemon logs
Local Docker Hub cache Trusted Distribution mirror + reloadable registry-mirrors mirror TLS/auth/retention/capacity resolved digest, mirror log hit, upstream fallback policy
Enable live restore on standalone Linux host daemon.json or fleet policy; staged reload Linux containers, compatibility expectations, log behavior daemon PID, test container ID/PID, external health before/during/after
Move Docker storage Maintenance/migration procedure, not hot reload backup, capacity, storage-architecture map, downtime/rollback filesystem + Engine image-store evidence, migration test, rollback copy
Desktop proxy configuration Docker Desktop supported settings Desktop admin policy and VM architecture knowledge Desktop settings export/screenshot or managed-settings evidence, pull test

13. Change record template

Change ID:
Owner:
Target daemon/context:
Current Engine/Desktop version:
Current configuration sources:
Proposed setting + owner:
Validation command/result:
Reloadable? yes/no + documentation basis:
Expected daemon PID/start-time behavior:
Expected container continuity:
External dependency test:
Secrets redacted? yes/no:
Rollback source and command/procedure:
Approval / maintenance window:
Post-change evidence:

Knowledge check

Why is centralized configuration management not automatically safer than manual edits?

A registry mirror serves the same tag but a different digest than expected. What should happen?

Why is live restore not equivalent to high availability?

Where should a data-root change be classified?

What is the core rule for configuration ownership?

Next lesson

Next: Daemon Configuration, daemon.json, systemd, Proxies, Registry Mirrors, Live Restore, and Host Integration: Diagnostics, Failure Modes, Security, and Performance

Continue with the next lesson in the course sequence and carry forward the evidence-first Docker operating model.

Official references and version notes

Design baseline date: 2026-09-22. Reloadability and live-restore semantics are taken from current Engine 29 documentation and must be rechecked before future fleet rollouts because supported reloadable keys and platform behavior can evolve.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.