单机部署Docker私有仓库拉取Hyperf镜像的关键是:能推得进、拉得出、存得住、信得过;需挂载宿主机目录实现持久化,配置insecure-registries信任HTTP仓库,打标签后推送并验证,确保本地可拉取运行。

服务器上用 Docker 搭建私有仓库来拉取 Hyperf 镜像,单机部署的关键是:能推得进、拉得出、存得住、信得过。不建议直接用默认容器内存储或 HTTP 明文方式,尤其在生产或团队协作场景下。
基础仓库启动(带持久化)
Registry 默认把镜像存在容器里,重启就丢。必须挂载宿主机目录:
- 创建存储目录:
mkdir -p /data/registry - 启动命令(端口 5000,自动重启):
docker run -d \--name registry \-p 5000:5000 \--restart=always \-v /data/registry:/var/lib/registry \registry:2.8.1
验证是否运行:curl http://localhost:5000/v2/ 应返回空 JSON {};/v2/_catalog 则返回当前镜像列表(初始为空)。
推送 Hyerf 镜像到私有仓库
Hyperf 官方镜像(如 hyperf/hyperf:8.2-alpine)需先拉取,再重打标签适配私有地址:
- 拉取原镜像:
docker pull hyperf/hyperf:8.2-alpine - 打标签(格式:
仓库地址:端口/命名空间/镜像名:tag):docker tag hyperf/hyperf:8.2-alpine localhost:5000/myapp/hyperf:8.2-alpine - 推送:
docker push localhost:5000/myapp/hyperf:8.2-alpine
若报错 unauthorized: authentication required,说明没开认证;若报 http: server gave HTTP response to HTTPS client,说明客户端未信任 HTTP 仓库——需配置 Docker 守护进程允许 insecure registry(见下一条)。
Docker 客户端信任配置(关键一步)
现代 Docker 默认拒绝 HTTP 私有仓库。单机部署若用 localhost:5000,需在宿主机的 Docker 配置中显式声明为不安全源:
- 编辑
/etc/docker/daemon.json(无则新建):{ "insecure-registries": ["localhost:5000"] } - 重启 Docker:
sudo systemctl restart docker - 确认生效:
docker info | grep -A 1 "Insecure Registries"
注意:此配置仅适用于内网或可信单机环境;跨主机或生产环境务必启用 HTTPS(自签名证书即可),否则无法被其他节点识别。
从私有仓库拉取并运行 Hyperf
推送成功后,在同一台服务器上可直接拉取使用:
- 拉取:
docker pull localhost:5000/myapp/hyperf:8.2-alpine - 运行测试:
docker run --rm -it localhost:5000/myapp/hyperf:8.2-alpine php --version - 若用于实际项目,通常还需挂载代码目录、配置文件和启动命令,例如:
docker run -d \--name hyperf-app \-p 9501:9501 \-v $(pwd)/app:/app \localhost:5000/myapp/hyperf:8.2-alpine \php /app/bin/hyperf.php start
整个流程无需公网依赖,镜像版本可控,适合 CI/CD 流水线中构建、推送、部署一体化闭环。


















