Docker私有镜像仓库搭建registry
如果你在局域网里反复从 Docker Hub 拉镜像,速度慢不说,还可能遇到限流。
自己搭建一套 docker registry 私有镜像仓库,再把客户端地址填进 insecure-registries,就能实现内网镜像加速和统一管理。
本文面向零基础用户,按步骤操作即可完成部署并验证推拉镜像。
先把环境和地址准备好
准备一台 Linux 服务器,建议内存不低于 1GB,磁盘预留足够空间存放镜像。
先确认 Docker 已安装,没有装的话执行:
curl -fsSL https://get.docker.com | bash
systemctl enable --now docker
记录这台服务器的内网 IP 和开放端口,本文使用 192.168.1.10 和 5000 端口作为私有仓库入口。
若服务器有防火墙,记得放行 5000 端口:
firewall-cmd --permanent --add-port=5000/tcp && firewall-cmd --reload
启动 registry 容器并开放访问
Docker Registry 官方镜像就是 registry:2,直接运行一个容器即可:
docker run -d \
--name registry \
--restart=always \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
registry:2
这里把容器数据目录挂载到宿主机 /data/registry,容器删除后镜像数据也不会丢。
运行后可以用 docker ps 确认容器状态是 Up。
默认情况下 registry 走 HTTPS 加密传输,但内网常用 HTTP 访问。
为了让 Docker 认账,需要修改每个使用该仓库的客户端配置 /etc/docker/daemon.json,加入 insecure-registries:
{
"insecure-registries": ["192.168.1.10:5000"]
}
改完执行 systemctl restart docker 重启 Docker,然后试着登录:
docker login 192.168.1.10:5000
没配置账号时默认匿名登录,提示 Login Succeeded 就说明仓库连通了。
配置内网镜像加速的核心参数
私有仓库搭好后,想让所有客户端从内网拉公共镜像更快,可以在同一份 daemon.json 里加上 registry-mirrors,指向官方 registry 的加速地址。
不过要注意:registry-mirrors 只影响 Docker Hub 官方镜像的拉取,不影响私有仓库的地址识别。
如果你有自己的加速器或云厂商提供的镜像源,可以这样写:
{
"registry-mirrors": ["https://docker.mirrors.example.com"],
"insecure-registries": ["192.168.1.10:5000"]
}
保存后重启 Docker,再用 docker info 查看 Registry Mirrors 一栏,确认配置已经生效。
对于内网环境,私有仓库本身就是一个天然加速源:客户端只需先从外网拉一次镜像,再 push 到私有 registry,之后其他机器直接从内网 pull,速度能提升数倍。
推送和拉取镜像验证流程
先把本地镜像打上私有仓库的标签:
docker tag nginx:latest 192.168.1.10:5000/nginx:latest
然后推送:
docker push 192.168.1.10:5000/nginx:latest
推送成功后,在另一台内网机器上直接拉取:
docker pull 192.168.1.10:5000/nginx:latest
拉取时间明显缩短,说明内网镜像加速生效。
也可以通过 API 查看仓库里的镜像列表:
curl http://192.168.1.10:5000/v2/_catalog
返回 {"repositories":["nginx"]} 即表示数据正常。
常见报错和避坑说明
报错 http::
server gave HTTP response to HTTPS client
原因是客户端没配置 insecure-registries,
检查 daemon.json 是否写对 IP 和端口,
并确认重启了 Docker。
push 时报 denied: requested access to the resource is denied:多半是仓库没有开启匿名推送,或使用了带认证的 registry。
生产环境建议给 registry 加上密码认证,可以用 htpasswd 生成账号并挂载到容器里。
注意磁盘占用:registry 容器持续运行后,镜像数据会不断增长。
建议定期执行 docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml 清理无用层,同时挂载目录做好备份。
还有一点容易被忽略:如果客户端 Docker 版本过低,可能不认 insecure-registries 里的 CIDR 写法,尽量写具体 IP。
所有配置修改后必须重启 Docker,否则不生效。
完成以上步骤后,你的内网已经有一台能用的私有镜像仓库。
后续给 registry 加 TLS 证书或者接入认证时,再从本文基础上扩展即可。
如果实际操作中遇到其他报错,先检查防火墙、宿主机挂载目录权限和 Docker 版本,多数问题都出在这三处。