知其然,知其所以然
Docker 容器原理 2026-10-10

depends_on 与健康检查:start 顺序不等于 ready

在 Docker Compose v5.5.1 里实测 depends_on:只写服务名时 web 比需要 3 秒才就绪的 db 只晚 0.10 秒启动;condition: service_healthy 让 web 等到健康检查通过(晚 3.61 秒);service_completed_successfully 在任务 exit 1 时让 up 以 1 退出、web 停在 Created;启动 c 会连带启动依赖,--no-deps 则只启动自己。

Docker Docker Compose depends_on healthcheck service_healthy 启动顺序 真实验证 动画演示
Kubernetes 2026-10-10

StatefulSet:稳定的名字、顺序与存储

在 kind 集群里实测 StatefulSet 的三个“稳定”:Pod 按 web-0、web-1、web-2 有序创建(前一个 Ready 才创建下一个,各 7 秒)并从大序号往小序号逐个终止;重建后名字和 DNS(web-0.web.<ns>.svc)不变但 Pod IP 会变;volumeClaimTemplates 给每个 Pod 一个 PVC,Pod 重建和缩容扩容后数据仍在,persistentVolumeClaimRetentionPolicy 可让 PVC 随缩容/删除一起删除;OrderedReady 会被一个不就绪的 Pod 卡住,Parallel 不会。

Kubernetes StatefulSet 稳定身份 headless Service volumeClaimTemplates podManagementPolicy 真实验证 动画演示
Docker 容器原理 2026-10-10

Compose profiles:按场景启动不同服务

在 Docker Compose v5.5.1 里实测 profiles:没有 profile 的服务总是启动,带 profile 的默认不启动,--profile 或 COMPOSE_PROFILES 才启动;点名一个服务(up debug、run tools)会直接激活它;没有 profile 的服务依赖带 profile 的服务时会报 invalid compose project;不带 profile 的 down 不会停掉带 profile 的服务。

Docker Docker Compose profiles COMPOSE_PROFILES 服务分组 真实验证 动画演示
Docker 容器原理 2026-10-10

Compose 覆盖文件:多个 -f 的合并规则

用 docker compose config 实测 Compose 多文件合并:不带 -f 时 compose.override.yaml 自动合并;单值覆盖、environment 和 labels 按键合并、ports 追加、volumes 按挂载目标合并;-f 越靠后优先级越高;!reset 清空、!override 整体替换列表。

Docker Docker Compose override 多文件合并 !reset !override 真实验证 动画演示
Docker 容器原理 2026-10-10

Compose 的环境变量:插值、env_file 与优先级

在 Docker Compose v5.5.1 里实测环境变量的来源与优先级:environment 胜过 env_file;.env 只用于 compose.yaml 里的 ${…} 插值,不进容器;shell 高于 .env;不写值的 environment 项从 shell 透传;docker compose run -e 覆盖一切;--env-file 替换 .env;${VAR:-x}、${VAR-x}、${VAR:?msg} 的区别。

Docker Docker Compose 环境变量 env_file .env 插值 真实验证 动画演示
Docker 容器原理 2026-10-10

Compose 网络:默认网络和多网络隔离

在 Docker Compose v5.5.1 里实测 compose 的网络:默认建「项目名_default」,服务名和容器名都能解析;前后端分网后 proxy 连 db 的名字都解析不了;internal: true 的网络没有默认路由、不能出网;aliases 与 ipv4_address 可以固定名字和地址。

Docker Docker Compose networks internal 别名 固定IP 真实验证 动画演示
Docker 容器原理 2026-10-10

Compose 扩容:scale 与端口冲突

在 Docker Compose v5.5.1 里实测扩缩容:--scale worker=3 得到 worker-1..3,缩到 1 保留编号小的原容器,再扩容补出新容器;服务名解析出所有副本的 IP;deploy.replicas 被 --scale 覆盖;固定宿主机端口映射在扩容时冲突(退出码 1),端口范围或只写容器端口则成功;设了 container_name 就不能扩容。

Docker Docker Compose scale replicas 扩容 端口冲突 真实验证 动画演示
Docker 容器原理 2026-10-10

Compose watch:sync、rebuild 的触发规则

在 Docker Compose v5.5.1 里实测 docker compose watch:sync 改文件约 0.6 秒后容器里生效且容器不重启,新增和删除也同步;sync+restart 先同步再重启同一个容器(约 3.8 秒);rebuild 重新构建镜像并重建容器(约 6.2 秒),新容器里是最新文件。

Docker Docker Compose watch develop.watch 热更新 真实验证 动画演示
Kubernetes 2026-10-10

StatefulSet 更新策略:partition 与滚动顺序

在 5 节点 kind 集群里实测 StatefulSet 更新:RollingUpdate 从最大序号开始一次换一个(web-3 +6.7 秒、web-2 +11.7 秒、web-1 +16.1 秒、web-0 +21.7 秒);partition=2 只更新 web-2、web-3,currentRevision 与 updateRevision 不同,改成 0 后其余更新;OnDelete 改模板后 Pod 全不动,删一个才换一个;更新到坏模板后卡在 web-3,即使把模板改回好的,不健康的 web-3 也不会被自动替换,必须手动删除。

Kubernetes StatefulSet 滚动更新 partition OnDelete updateStrategy 真实验证 动画演示
Docker 容器原理 2026-10-10

HEALTHCHECK:状态怎么流转、重试与启动宽限

在 Docker Engine 29.8.2 里实测健康检查:interval 1s、retries 3 时一直失败约 3 秒变成 unhealthy,检查通过立刻变回 healthy;慢启动的程序在没有 start-period 时会先变成 unhealthy 再变回 healthy;超时的检查记 ExitCode -1;start-period=6s 把变成 unhealthy 推迟到 7.1 秒;unhealthy 的容器不会被 --restart always 重启。

Docker healthcheck 健康检查 start-period unhealthy 真实验证 动画演示
Docker 容器原理 2026-10-10

json-file 日志:没有轮转时磁盘怎么被写满

在 Docker Engine 29.8.2(Docker Desktop)里实测容器日志:默认驱动是 local(二进制文件 local-logs/container.log,没有 LogPath);显式 json-file 时每行 JSON 带 log / stream / time,超长行按 16384 字节拆开;max-size=10k max-file=3 把 1000 行轮转成只剩 209 行;json-file 默认无上限;容器删除后日志也被删。

Docker 日志 json-file local日志驱动 日志轮转 docker logs 真实验证 动画演示
Docker 容器原理 2026-10-10

日志驱动:local、syslog 与 none 的差别

在 Docker Engine 29.8.2 里实测日志驱动:内置 awslogs、fluentd、gcplogs、gelf、journald、json-file、local、splunk、syslog;--log-driver none 后 docker logs 报不支持读取;gelf 与 syslog 能把日志发到 UDP 接收端(GELF 的 JSON、rfc5424 的 syslog 行),同时 docker logs 仍然可读;TCP 目标连不上时容器直接起不来(125)。

Docker 日志驱动 gelf syslog log-driver 双写日志 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号