Docker默认不记录镜像删除审计日志,需通过启用守护进程日志(如journald)、私有仓库API日志、权限控制或shell wrapper等外部机制实现审计。

默认情况下,Docker 本身不记录镜像删除操作的详细审计日志(如谁、何时、删了哪个镜像),docker rmi 或 docker image prune 等命令不会自动写入可追溯的操作日志。要实现“谁删了关键镜像”的审计能力,必须依赖外部机制或提前配置。以下是可行且实用的路径:
启用 Docker 守护进程审计日志(需 root 权限)
Docker 支持将守护进程(daemon)的操作日志输出到 syslog 或 journald,前提是启动时启用了 --log-driver=syslog 或 --log-driver=journald,并确保日志级别包含 info/warn。
- 检查当前配置:sudo docker info | grep "Logging Driver"
- 若为 json-file(默认),需修改 /etc/docker/daemon.json:
{"log-driver": "journald", "log-level": "info"} - 重启服务:sudo systemctl restart docker
- 查看删除操作(含用户 UID 和调用命令):journalctl -u docker --since "2 hours ago" | grep -i "rmi\|prune"
通过私有仓库 API 日志反向追踪(推荐用于生产环境)
真正具备审计价值的日志通常来自镜像仓库层,而非本地 Docker CLI。例如:
- Harbor:默认记录所有 API 操作(包括 DELETE /api/v2.0/projects/.../artifacts),日志路径为 /var/log/harbor/core.log,含用户名、IP、时间戳、请求路径和返回码
- Nexus Repository:启用“Repository Auditing”后,可在 Admin → System → Logging 中配置 audit log 输出
- Docker Registry(v2):需配合 registry-log 中间件或 Nginx access log,记录 DELETE 请求头中的 Authorization 字段(可解析出 token 对应账号)
强制执行操作前的身份绑定与权限控制
单纯靠事后日志不如事前约束。关键镜像应通过权限隔离降低误删/恶意删风险:
- 为不同团队分配独立项目/命名空间(如 Harbor 中按 project 隔离),禁用跨项目删除权限
- 关键镜像打保护标签(如 :prod-locked),并通过 CI/CD 流水线或 webhook 拦截含该标签的 DELETE 请求
- 所有生产环境删除操作必须走审批流程(如通过 GitOps 提交 PR,由机器人调用 API 执行,并自动记录 commit author + reviewer)
补充:本地操作简易留痕方案(开发/测试环境适用)
若无法改造基础设施,可用 shell wrapper 记录基础信息:
- 将 docker rmi 替换为自定义脚本,记录执行者(whoami)、时间、参数到统一日志文件
- 示例(保存为 /usr/local/bin/docker-rmi-audit):
#!/bin/bash echo "$(date '+%F %T') $(whoami) $(hostname) $*" >> /var/log/docker-rmi-audit.log /usr/bin/docker rmi "$@"
- 赋予执行权限并替换 alias:alias docker=rmi='docker-rmi-audit'


















