daemon.json 加固是什么
Docker 守护进程的配置写在 daemon.json 里,改动后重启服务生效。加固的常见动作包括:重启守护进程时保持容器运行、禁止容器获得额外权限、统一日志轮转上限、关闭默认桥接网络内的相互通行、限制进程打开的句柄数。这些项大多是一行配置,但会改变容器行为,因此变更应成组评估并留有回滚方案。
基本信息
| 配置文件位置 | Linux:/etc/docker/daemon.json;桌面版在设置界面 |
|---|---|
| 生效方式 | 修改后重启 docker 服务(桌面版通过界面应用) |
| 常用加固项 | live-restore、no-new-privileges、log-opts 轮转、icc、default-ulimits |
| 校验方式 | python3 -m json.tool 校验语法通过后再重启 |
| 回滚准备 | 改动前备份原文件,并准备好恢复命令 |
| 作用范围 | 守护进程级,影响本机所有容器 |
典型使用场景
- 升级或重启 Docker 时希望业务容器不中断
- 限制容器进程提权,降低被攻破后的影响面
- 统一日志轮转策略,避免日志把磁盘写满
- 隔离默认桥接网络内的容器互访,收紧横向可达路径
- 给所有容器设置统一的句柄数上限,避免个别服务耗尽系统资源
配置示例
配置示例
{
"live-restore": true,
"no-new-privileges": true,
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" },
"icc": false,
"default-ulimits": { "nofile": { "Name": "nofile", "Hard": 65536, "Soft": 65536 } }
}应用与确认
应用与确认
# 改前备份,改后先校验 JSON 语法再重启
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
sudo python3 -m json.tool /etc/docker/daemon.json > /dev/null && echo json-ok
sudo systemctl restart docker
# 确认配置已加载
docker info | grep -E 'Live Restore|Logging Driver'
# 检查已有容器状态,确认重启过程未造成中断
docker ps --format 'table {{.Names}}\t{{.Status}}'常用项影响对照
| 配置项 | 作用 | 变更影响 |
|---|---|---|
| live-restore | 守护进程重启时保持容器运行 | 升级维护窗口更安全 |
| no-new-privileges | 禁止容器进程获得额外权限 | 部分需要提权的镜像行为受限 |
| log-opts | 限制单个日志文件大小与数量 | 历史日志会被轮转删除 |
| icc | 关闭默认桥接网络内容器互通 | 依赖该网络的旧服务可能断链 |
| default-ulimits | 统一句柄数等系统限制 | 过高会削弱资源保护 |
关闭默认桥接互通只影响默认网络,自定义网络不受影响;排查改配置后服务断链时,先确认相关容器接在哪张网络上。
daemon.json 语法错误会导致守护进程无法启动,容器管理操作全部不可用。改动前备份、改后校验、窗口期通知,这三步不能省。