windows 上用 docker 搭建私有镜像仓库并推送镜像,核心是启动官方 registry 容器、配置 docker 允许非 https 推送、打标签再推送;需运行 docker run -d -p 5000:5000 --name registry registry:2,修改 daemon.json 添加 "insecure-registries": ["localhost:5000"],再执行 docker tag 和 docker push 完成推送。
windows 上用 docker 搭建私有镜像仓库并推送镜像,核心是启动官方 registry 容器、配置 docker 允许非 https 推送、打标签再推送。整个过程不依赖外部服务器,纯本地即可完成。
启动本地 registry 服务
只需一条命令就能跑起基础仓库:
- 打开 PowerShell 或 CMD(无需管理员权限)
- 执行:
docker run -d -p 5000:5000 --name registry --restart=always registry:2 - 容器启动后,访问
http://localhost:5000/v2/返回空 JSON{}即表示服务就绪 - 默认数据存于容器内
/var/lib/registry,如需持久化,加挂载参数:-v D:\docker-registry:/var/lib/registry
配置 Docker 允许向本地仓库推送
Windows 默认只信任 HTTPS 仓库,而本地 registry 是 HTTP 协议,必须显式声明为“不安全”:
- 编辑 Docker Desktop 配置文件:
C:\ProgramData\Docker\config\daemon.json - 添加或修改
insecure-registries字段,内容为:["localhost:5000"](注意是数组格式) - 保存后,在 Docker Desktop 右下角托盘图标 → Settings → Reset → Restart Docker Desktop
- 验证是否生效:运行
docker info | findstr "Insecure",应输出包含localhost:5000
推送镜像到本地仓库
以官方 alpine 镜像为例,三步完成推送:
- 拉取测试镜像:
docker pull alpine:latest - 打标签(关键!必须带上
localhost:5000/前缀):docker tag alpine:latest localhost:5000/my-alpine:v1 - 推送:
docker push localhost:5000/my-alpine:v1 - 推送成功后,可访问
http://localhost:5000/v2/_catalog查看已上传镜像列表,返回类似:{"repositories":["my-alpine"]}
验证拉取与使用
推送后立刻验证是否可用:
- 先删掉本地原镜像:
docker rmi alpine:latest localhost:5000/my-alpine:v1 - 从仓库拉取:
docker pull localhost:5000/my-alpine:v1 - 运行测试:
docker run --rm localhost:5000/my-alpine:v1 echo "hello from private registry" - 若输出正常,说明整个链路(启动→配置→推送→拉取→运行)全部通了











