直接运行registry:2镜像并配置insecure-registries即可使用,无需Nginx/TLS;常见失败原因是未加-d/-p参数、挂载目录权限错误或客户端未配置insecure-registries。

直接跑官方 registry:2 镜像 + 正确配 insecure-registries 就能用,别折腾 Nginx、TLS 或自建镜像代理层(除非真有 HTTPS/认证/审计需求)。
docker run registry:2 容器秒退或 curl 5000 返回 connection refused
根本原因通常是端口没暴露、目录权限不对,或者容器根本没在后台运行。
- 必须加
-d:不加就前台启动,终端退出容器也退出 - 必须加
-p 5000:5000:否则容器监听了 5000,但宿主机访问不到 - 挂载目录要提前创建并赋权:
sudo mkdir -p /opt/registry/data && sudo chown -R $USER:$USER /opt/registry/data - 检查端口是否被占:
sudo ss -tuln | grep :5000,冲突就换端口(比如-p 5001:5000) - 验证服务是否起来:
curl http://localhost:5000/v2/,返回空 JSON{}才算正常
docker push 报错 Get "https://x.x.x.x:5000/v2/": http: server gave HTTP response to HTTPS client
这是 Docker 默认行为,不是 bug。registry:2 默认只提供 HTTP 服务,而 Docker 客户端强制走 HTTPS,必须显式声明信任 HTTP 地址。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 编辑
/etc/docker/daemon.json,加入 insecure 地址(注意是数组):{"insecure-registries": ["192.168.1.100:5000"]} - IP 写具体地址,别写
0.0.0.0/0或通配符(Docker 不认) - 改完执行:
sudo systemctl daemon-reload && sudo systemctl restart docker - 验证是否生效:
docker info | grep -A 5 "Insecure Registries",能看到你填的地址才算成功 - 如果多台机器都要推/拉,每台都得单独配,不能只配服务端
docker tag 和 push 格式错一个字符就失败
本地镜像不能直推,必须重打标签,且格式极其严格:「仓库地址:端口/命名空间/镜像名:标签」。命名空间可选,但建议加上,避免冲突。
- 正确示例:
docker tag nginx:alpine 192.168.1.100:5000/myapp/nginx:1.24 - 常见错误:
- 漏端口:
192.168.1.100/myapp/nginx→ 缺:5000 - 多协议前缀:
http://192.168.1.100:5000/myapp/nginx→ Docker 不认http:// - 镜像名含下划线或大写字母:
my_app/nginx或MyApp/nginx→ registry 拒绝,只接受小写字母、数字、短横线、点
- 漏端口:
- 推送后查仓库内容:
curl http://192.168.1.100:5000/v2/_catalog(需 registry 开启 catalog API,v2 默认支持)
为什么不用 registry:latest?
registry:latest 可能指向未充分验证的预发布版,而 registry:2 是当前稳定主线版本,纯 Go 实现、无 Python 依赖、启动快、内存占用低、兼容性好。
- 别编译源码、别改配置文件、别套 Nginx —— 开箱即用才是 registry:2 的设计哲学
- 生产环境若需 HTTPS 或认证,再加反向代理和证书;开发/测试环境 HTTP + insecure 配置完全够用
- 数据卷挂载路径(如
/opt/registry/data)一旦定下,后续升级或迁移别轻易改,否则镜像元数据会断链
真正容易被忽略的是:insecure-registries 必须在 所有使用该仓库的客户端 上配置,而不是只在 registry 所在机器上配;而且每次改 daemon.json 后,systemctl restart docker 是硬性要求,光 reload 不够。

















