Docker Engine 29.9.x 行为修复笔记:容器起不来、ps -s 全挂与 fluentd panic
29.9.1 于 2026-10-14 发布,29.9.2 于 2026-10-20 发布。下面五条修复都在 29.9.1;29.9.2 主要是 Go runtime 与证书链安全更新。复现前先记录 docker version、docker info 和 daemon 日志,避免把存储、网络或运行时问题混在一起。
1. --link-local-ip 接受非 link-local 地址,容器起不来
症状:创建容器或把容器接入网络时传入 --link-local-ip 10.0.0.5 这类地址,命令没有当场拒绝,随后容器启动失败。合法范围只有 169.254.0.0/16 和 fe80::/10。
判断:docker inspect -f '{{json .NetworkSettings.Networks}}' 看 LinkLocalIPs;或直接用非 link-local 地址做最小复现。若字段里出现上述范围外的地址,删掉该选项重建。29.9.1 起会在创建容器或连接网络阶段拒绝,不再留下启动到一半的容器。moby/moby#53923
版本:29.9.1 修复;29.9.0 及更早版本没有该限制。
2. docker ps -s 因一个容器算不出大小而整条失败
症状:docker ps 正常,docker ps -s 直接报错,列表完全出不来;只要某个容器的大小计算失败,整次查询也会失败。
判断:先确认不是 daemon 挂了,再用单容器过滤缩小范围:
docker ps -q | while read id; do
docker ps -s --filter "id=$id" >/dev/null || echo "size failed: $id"
done
也可对可疑容器执行 docker inspect --size -f '{{.SizeRw}} {{.SizeRootFs}}' "$id"。29.9.1 修复后,单个容器大小不可计算不再导致整个列表失败。moby/moby#53921
版本:29.9.1 修复。
3. fluentd 日志驱动:TLS 地址不可达 + async 触发 daemon panic
症状:容器配置 fluentd 日志驱动,启用 TLS 且 fluentd-async=true,但 fluentd TLS 端点暂时不可连接;daemon 可能 panic,并影响其他容器。
判断:
docker inspect -f '{{json .HostConfig.LogConfig}}'
journalctl -u docker --since "10 min ago" | grep -iE 'panic|fluentd'
openssl s_client -connect :24224 -CAfile
先确认地址、证书和网络连通性。若日志中反复出现 fluentd 相关 panic,升级到 29.9.1;29.9.1 才包含该修复。moby/moby#53922
版本:29.9.1 修复。
4. bridge 绑定非 docker firewalld zone 后,daemon 重启不恢复
症状:bridge 网络被绑定到 docker 以外的 firewalld zone,执行 systemctl restart docker 后网络没有恢复,容器无法接入;daemon 日志里会出现 bridge/firewalld 相关错误。
判断:
firewall-cmd --get-active-zones
firewall-cmd --zone= --list-interfaces
ip link show
journalctl -u docker --since "10 min ago" | grep -iE 'bridge|firewalld|restore'
对照重启前后的 docker network ls 和 docker network inspect 。29.9.1 修复该恢复路径;同版还调整了 iptables 与 ip6tables 都禁用时不把 bridge 加入 firewalld docker zone 的行为。moby/moby#53907
版本:29.9.1 修复。
5. rootless + userns 下 --domainname 不生效
症状:rootless 模式并启用 user namespace 时,docker run --domainname example.com ... 的配置看似写入,但容器内 domainname 仍为空或未设置。
判断:
docker info -f '{{json .SecurityOptions}}'
docker inspect -f '{{.Config.Domainname}}'
docker exec cat /proc/sys/kernel/domainname
runc --version
若 inspect 有值而 /proc/sys/kernel/domainname 为空,重点查 OCI runtime。29.9.1 修复该问题,前提是运行时支持 OCI 的 domainname 字段,例如 runc >= v1.2.0;只升 Docker 不升 runc 仍可能不生效。moby/moby#53899
版本:29.9.1 修复,需要 runc >= v1.2.0 等支持 domainname 字段的运行时。