关键不是重启Docker,而是确保Docker服务开机自启且Hyperf容器设restart=unless-stopped;需执行sudo systemctl enable docker,并用docker update或docker-compose配置重启策略,同时检查依赖就绪与日志排查启动失败原因。

要让服务器重启后自动拉起 Hyperf 容器,关键不是“重启 Docker”,而是确保宿主机重启时:Docker 服务自身开机自启,且Hyperf 容器设置了合适的 restart policy。这两项缺一不可,否则容器不会自动启动。
确保 Docker 服务随系统开机启动
即使容器配置了自动重启,若 Docker daemon 没起来,一切归零。Linux(systemd 系统)下执行:
- sudo systemctl enable docker —— 启用开机自启
- systemctl is-enabled docker —— 应返回 enabled
- systemctl status docker —— 确认状态为 active (running)
为 Hyperf 容器设置重启策略
该策略必须在容器创建时指定,或用 docker update 补设。推荐使用 unless-stopped:宿主机重启后自动拉起,但若你手动执行过 docker stop,它就不会再启动,避免误恢复。
- 新建容器时加参数:
docker run -d --restart unless-stopped --name hyperf-app -p 9501:9501 hyperf/hyperf:8.1-alpine-v3.16-cli - 已有容器补设:
docker update --restart unless-stopped hyperf-app - 若用 docker-compose,直接在 service 下写:
restart: unless-stopped
检查容器是否真被拉起成功
设置了策略不等于一定成功。宿主机重启后,可能因依赖未就绪(如 MySQL 还没启动完)、端口冲突、volume 路径不存在等导致容器反复退出。
- 查所有容器状态:
docker ps -a,重点关注状态是否为 Up 或 Exited - 看失败容器日志:
docker logs hyperf-app - 查 Docker 服务日志辅助诊断:
journalctl -u docker -n 50 --no-pager - 常见卡点:MySQL 服务名解析失败(确认
depends_on+health_check配置)、runtime/目录权限问题、Swoole 扩展未加载(php -m | grep swoole)
docker-compose 中的典型配置示例
这是生产环境中稳妥的做法,包含依赖健康检查和重启保障:
-
restart: unless-stopped—— 容器级自启兜底 -
depends_on:下配mysql: condition: service_healthy—— 确保 DB 就绪再启 Hyperf -
environment:中通过APP_ENV=prod触发生产模式(禁用调试、启用 OPcache) -
volumes:挂载./config:/app/config:ro实现配置外挂,避免重建镜像











