最简单可靠的方式是直接运行官方 registry 镜像:docker run -d --restart=always --name registry -v /opt/registry/data:/var/lib/registry -p 5000:5000 registry:2,需配置 insecure-registries 才能推送拉取。

用 Docker Registry 搭建轻量私有镜像仓库
最简单可靠的方式是直接运行官方 registry 镜像,无需编译或复杂依赖。它默认监听 5000 端口,支持 HTTP(开发测试够用),生产环境建议加 Nginx 反向代理并启用 HTTPS。
快速启动基础仓库(无认证、HTTP)
执行以下命令即可运行一个临时可用的私有仓库:
docker run -d \ --restart=always \ --name registry \ -v /opt/registry/data:/var/lib/registry \ -p 5000:5000 \ registry:2
- /opt/registry/data 是镜像存储路径,确保目录存在且 Docker 有读写权限
- 容器会自动创建必要目录结构,首次拉取镜像时会生成
blobs和repositories - 可通过
curl http://localhost:5000/v2/验证服务是否正常(返回{}表示 OK)
推送和拉取镜像的正确操作
本地镜像必须重打标签,格式为:仓库地址:端口/命名空间/镜像名:标签。例如:
# 给本地 nginx 镜像打私有仓库标签
docker tag nginx:alpine localhost:5000/myapp/nginx:1.24
<h1>推送到私有仓库</h1><p>docker push localhost:5000/myapp/nginx:1.24</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill10918" title="Linux Security Scanner"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20cf0281539.jpg" alt="Linux Security Scanner" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill10918" title="Linux Security Scanner">Linux Security Scanner</a>
<p>Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...</p>
</div>
<a href="/xiazai/skill10918" title="Linux Security Scanner" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><h1>其他机器拉取(需先配置 Docker 允许不安全仓库)</h1><p>docker pull 192.168.1.100:5000/myapp/nginx:1.24
- Linux 客户端若提示
http: server gave HTTP response to HTTPS client,需在/etc/docker/daemon.json中添加不安全仓库配置: -
{"insecure-registries": ["192.168.1.100:5000"]},然后执行sudo systemctl restart docker - 命名空间(如
myapp)非必需,但建议使用,便于分类管理
添加基础认证与 HTTPS(生产推荐)
registry 自身不内置用户系统,需配合 htpasswd 文件 + 反向代理实现登录控制:
# 生成密码文件(安装 apache2-utils 后) mkdir -p /opt/registry/auth htpasswd -Bbn admin mypassword > /opt/registry/auth/htpasswd <h1>启动带认证的 registry(仍用 HTTP,仅限内网)</h1><p>docker run -d \ --restart=always \ --name registry-auth \ -v /opt/registry/data:/var/lib/registry \ -v /opt/registry/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -p 5000:5000 \ registry:2
- 推送前需先登录:
docker login 192.168.1.100:5000 - HTTPS 更安全:用 Nginx 或 Caddy 做反向代理,绑定域名 + SSL 证书,并将 registry 后端设为
http://localhost:5000 - 证书需被客户端信任,否则 Docker 仍会报错;可考虑用 Let's Encrypt 的泛域名证书
日常维护与注意事项
registry 默认不会自动清理未引用的镜像层,长期运行需手动 GC(垃圾回收):
- 停止 registry 容器:
docker stop registry - 执行 GC:
docker run --rm -v /opt/registry/data:/var/lib/registry registry:2 bin/registry garbage-collect /etc/docker/registry/config.yml - GC 前建议备份数据目录;配置文件中需开启
delete: enabled: true才能真正删除 - 查看仓库中有哪些镜像?registry 不提供 Web UI,可用
curl -X GET http://localhost:5000/v2/_catalog?n=100
不复杂但容易忽略

















