在Docker中运行Nexus私服并配置自动清理需两步:一是挂载/nexus-data卷保证数据持久化,二是必须同时配置“Delete unused manifests and images”(逻辑删除)和“Compact blob store”(物理压缩)两个定时任务,缺一不可。

在 Docker 中运行 Nexus 私服并配置自动清理任务,关键在于两件事:一是容器化部署时保证数据持久化和端口可用,二是清理必须分“逻辑删除镜像”+“物理压缩存储”两步走,缺一不可。
一、启动 Nexus3 容器并挂载数据卷
直接运行官方镜像,但必须映射 /nexus-data 目录,否则重启后所有仓库、用户、任务都会丢失:
- 创建持久化目录并授权(Nexus3 进程以 UID 200 运行):
mkdir -p /opt/nexus-data && sudo chown -R 200:200 /opt/nexus-data - 启动容器,暴露 UI 端口 8081 和 Docker 仓库端口 8082/8083:
docker run -d \<br> --name nexus3 \<br> -p 8081:8081 \<br> -p 8083:8083 \<br> -v /opt/nexus-data:/nexus-data \<br> sonatype/nexus3:3.60.0
- 首次访问
http://localhost:8081,用 admin 用户登录(初始密码在容器日志里:docker logs nexus3 | grep "password is")
二、创建 Docker Hosted 仓库
进入 Nexus 管理界面 → Repositories → Create repository → 选 docker (hosted):
- Name 填如
docker-hosted - HTTP port 设为 8083(与容器映射端口一致)
- 勾选 Enable Docker V1 API(兼容旧版客户端)
- 保存后,即可用
docker login localhost:8083推送镜像
三、配置两类定时清理任务(必须都设)
Nexus UI 的 Tasks 页面(System → Tasks → Create task)中,需添加两个独立任务:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
-
Delete unused manifests and images:
作用:逻辑删除已无标签引用的镜像层和清单;
配置建议:仓库选刚建的docker-hosted,Schedule 设为每天凌晨 2 点 -
Compact blob store:
作用:真正释放磁盘空间,把标记为删除的 Blob 物理擦除;
配置建议:Blob store 选对应 Docker 仓库使用的存储(如default或你自定义的docker-blob),Schedule 同样设为每天 2:15(错开前一个任务)
四、补充:用 nexus-cli 实现按策略删镜像(可选增强)
如果还需按“保留最近 N 个 tag”或“只删 dev/test 镜像”,可在宿主机装 nexus-cli 并写脚本:
- 下载并配置:
wget https://s3.eu-west-2.amazonaws.com/nexus-cli/1.0.0-beta/linux/nexus-cli && chmod +x nexus-cli
执行./nexus-cli configure,填入http://localhost:8081、仓库名、账号密码 - 示例命令(删
myapp镜像,只留最新 3 个 tag):./nexus-cli image delete -name myapp -keep 3 - 把这类命令写进 shell 脚本,再用 crontab 每日触发,就形成双保险
不复杂但容易忽略:只删镜像不跑 Compact 任务,磁盘空间一丁点都不会少。










