关键不是单纯重启,而是让新镜像或新配置生效:若仅改本地代码且已挂载,则docker compose restart hyperf即可;若更新镜像标签,则执行docker compose up -d --build hyperf;重大升级需docker compose down后pull再up -d,并验证日志、健康接口及依赖连通性。

要对单机部署的 Hyperf 服务通过 Docker Compose 重启并更新到新版本,关键不是“单纯重启”,而是让新镜像或新配置生效。Hyperf 是 PHP 微服务框架,常以容器化方式部署,其更新通常涉及镜像标签变更、配置调整或代码挂载内容更新。以下是清晰、可落地的操作路径:
确认更新来源:改镜像还是改代码?
Hyperf 更新分两类,处理方式不同:
-
镜像版本升级(如从
hyperf/hyperf:3.1→hyperf/hyperf:3.2):需拉取新镜像 + 重建容器 -
本地代码更新(如修改了
app/下的控制器):若使用volumes挂载源码,只需重启服务即可生效(无需重建)
更新并重启单个 Hyperf 服务(推荐方式)
假设你的 docker-compose.yml 中定义了名为 hyperf 的服务,且已用 -v ./src:/hyperf/app 挂载代码:
- 若只改了本地 PHP 代码 → 运行:
docker compose restart hyperf - 若改了镜像标签(如
image: hyperf/hyperf:v3.2.0)→ 运行:docker compose up -d --build hyperf
(--build在无Dockerfile时可省略;若有自定义构建,保留该参数) - 若还用了环境变量或配置文件(如
.env或config/autoload/),确保它们已同步到挂载路径,再执行 restart
完整重建所有服务(含依赖如 MySQL、Redis)
适用于重大升级(如 Hyperf 主版本变更 + 配置结构变动):
- 先停用并清理旧容器(保留数据卷):
docker compose down - 拉取最新镜像(可选,避免 up 时自动拉取卡住):
docker compose pull hyperf - 重新部署(应用全部新配置):
docker compose up -d - 验证日志是否正常启动:
docker compose logs -f hyperf
验证与收尾
更新后务必检查:
- 服务是否在运行:
docker compose ps看hyperf状态为Up - HTTP 接口是否响应(如
curl http://localhost:9501/health) - 数据库连接、Redis 等依赖是否连通(Hyperf 日志中无连接拒绝错误)
- 若启用了 Swoole 热重载(
watcher),注意它仅对挂载代码生效,不适用于镜像内静态打包
不复杂但容易忽略:Hyperf 容器内常需执行 php bin/hyperf.php start 启动,该命令受 restart: always 保护;只要容器启动成功,服务就会自动拉起。重点盯住日志输出,而非只看容器状态。











