15.2.6 守护进程参数与日志配置
守护进程(dockerd)参数与日志配置直接影响 Docker 的稳定性、资源占用与排障效率。本节给出原理草图、完整配置示例、命令解释、常见排错与练习。
原理草图:dockerd 参数与日志流
1. 守护进程配置文件与启动参数(daemon.json)
- 推荐统一使用 /etc/docker/daemon.json,避免参数分散。
- 完整示例(可直接使用):
{
"data-root": "/data/docker",
"log-level": "info",
"registry-mirrors": ["https://mirror.example.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"iptables": true,
"ip-forward": true,
"bip": "172.30.0.1/16",
"fixed-cidr": "172.30.0.0/16",
"insecure-registries": ["192.168.56.10:5000"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
命令与说明(修改后必须重载)
# 1) 语法校验(避免启动失败)
cat /etc/docker/daemon.json | jq .
# 2) 重新加载 systemd 配置
systemctl daemon-reload
# 3) 重启 Docker 服务生效
systemctl restart docker
# 4) 验证配置是否生效
docker info | egrep 'Docker Root Dir|Cgroup Driver|Logging Driver'
data-root:Docker 数据目录,建议挂载独立磁盘。exec-opts:设置 cgroup 驱动,与系统保持一致(systemd)。bip/fixed-cidr:自定义桥接网段,避免与业务网段冲突。log-driver+log-opts:日志驱动与轮转策略,防止磁盘被占满。
2. systemd 覆盖配置(建议用于代理/启动参数)
- 通过 drop-in 覆盖,避免直接改 unit 文件:
# 创建覆盖配置目录与文件
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<'EOF'
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=127.0.0.1,localhost,*.example.com"
EOF
# 重新加载并重启
systemctl daemon-reload
systemctl restart docker
3. 容器日志驱动选择与配置
- 常用驱动对比:
- json-file:默认,适合快速排查,需配置轮转。
- journald:与 systemd 统一,利于集中检索。
- syslog/fluentd:对接集中日志平台。
- 切换为 journald 示例:
{
"log-driver": "journald"
}
- 验证容器日志驱动:
docker info | grep "Logging Driver"
docker inspect --format '{{.HostConfig.LogConfig.Type}}' <container_id>
4. 守护进程日志查看与故障定位
# 实时查看 Docker 服务日志
journalctl -u docker -f
# 仅看最近 200 行,便于定位错误
journalctl -u docker -n 200 --no-pager
# 查找常见关键错误
journalctl -u docker | egrep "failed|error|ip conflict|overlay|cgroup"
- 常见问题与快速定位:
- 启动失败:
daemon.json语法错误 →jq .校验。 - 网络冲突:
bip与业务网段冲突 → 调整bip/fixed-cidr。 - 存储驱动报错:数据目录权限或残留 → 检查
/data/docker权限。
5. 排错示例:日志占满磁盘
# 查看 Docker 目录占用
du -sh /var/lib/docker /data/docker
# 查看 container 日志占用排行
find /data/docker/containers -name "*-json.log" -printf "%s %p\n" | sort -nr | head
处理策略:
- 配置 log-opts 轮转。
- 或切换到 journald 并设置 systemd 日志轮转策略。
6. 练习(含预期效果)
1) 修改日志轮转策略
# 修改 daemon.json 中 max-size 为 50m,max-file 为 3
# 重启后验证
docker info | grep "Logging Driver"
预期:日志驱动仍为 json-file,轮转生效。
2) 设置自定义数据目录
# 修改 data-root 为 /data/docker,确保目录存在
mkdir -p /data/docker
systemctl restart docker
docker info | grep "Docker Root Dir"
预期:显示 /data/docker。
3) 模拟网络冲突排查
- 将 bip 设置为与你业务网段相同,重启后观察日志报错。
- 修正 bip 后重启验证无报错。
小结
- 参数统一写入 daemon.json,结合 systemd drop-in 覆盖环境变量。
- 日志驱动与轮转策略必须在安装阶段规划。
- 通过 journalctl 和 docker info/inspect 快速定位问题。