自建仓库推送到NAS采用 Docker Registry 工作流
放弃手动 save
和 load
的方式,改用行业标准的 Registry(仓库)模式。这是最专业、最高效的方案。
优点:
- 彻底解决版本兼容性问题,因为 push/pull 协议是标准化的。
- 传输效率高,再次推送时只会上传有变动的层(layer)。
- 是 DevOps 和自动化流程的基础,是更专业的做法。
【在 NAS 上部署 Registry 服务并映射】
在方法1(见主页相关文章-如何提取docker镜像用于NAS手动安装)的基础上,registry Tags | Docker Hub 打包拉取docker pull --platform linux/amd64 registry:2
,或者自己直接拉取,这是 Docker 官方提供的私有仓库镜像。注意,这后面的:2
表示版本号。
然后在 Container Station 中导入并运行该容器。将其端口(5000)映射到 NAS 的一个端口(57080)上。
【进行Frp穿透】,这部分内容有很多方式,在局域网内操作就不用了,直接NAS地址:端口号即可。
【局域网配置信任地址】
由于私有仓库未使用 HTTPS 加密,需要告诉 Docker 客户端信任这个地址。
打开 Docker Desktop -> Settings
-> Docker Engine
。
在右侧的 JSON 配置文件中,添加 insecure-registries
字段。将你的局域网和外网地址都加进去。
JSON
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"insecure-registries": ["192.168.1.100:57080","你的Frp域名.app:12345"]
}
如果你弄错了,下面是默认的JSON配置
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false
}
点击 Apply & Restart
保存并重启 Docker 服务。这一步至关重要,否则 push 会失败。
【PC上打标签】,将你的镜像重新打上标签(tag),指向你的 NAS 私有仓库地址。
# 拉取一个用于测试的镜像hello-world
docker pull --platform linux/amd64 hello-world
# 格式: docker tag [源镜像名] [NAS_IP:端口/镜像名] 下面的my-只是自己起的新名字
docker tag hello-world 192.168.1.100:57080/my-hello-world
# 若不是局域网,则为:
docker tag hello-world 你的Frp域名.app:12345/my-hello-world
【将镜像推送到(push)你的 NAS】重新标记镜像 (Tag),指向你的仓库地址:
# 局域网
docker push 192.168.1.100:57080/my-hello-world
# 非局域网 通过 FRP 外网访问
docker push 你的Frp域名.app:12345/my-hello-world
(注:如果 Docker 默认要求 HTTPS,你可能需要在 Docker Desktop 的设置中将
192.168.1.100:5000
添加到 "insecure-registries" 列表中)
docker tag
和docker push
命令中的仓库地址格式是[域名或IP]:[端口]/[镜像名]
, 它不包含http://
或https://
这样的协议前缀。Docker 客户端会自动处理协议。
推送成功后,你就可以在 NAS 的 Container Station 里,通过镜像名称 192.168.1.100:57080/my-hello-world
来创建新的应用了,它会直接从你自己的仓库中拉取,速度飞快。
【在NAS中拉取】
拉取创建容器后打印出成功的日志:
完毕,大功告成~花费些时间才查出网络波动问题和一些规则问题了。o(╥﹏╥)o