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-size50m,max-file3
# 重启后验证
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 覆盖环境变量。
- 日志驱动与轮转策略必须在安装阶段规划。
- 通过 journalctldocker info/inspect 快速定位问题。