1. 拉取镜像
docker pull hyperf/hyperf:8.1-alpine-v3.16-swoole-v6.0
镜像版本可以去 Docker Hub 找。
2. 创建项目代码
composer create-project hyperf/hyperf-skeleton websocket-project
3. 部署容器
docker run -itd --name php_websocket \ -v $(pwd):/www \-p 9501:9501 \-p 9502:9502 \sha256:afd333a4be52a0f36e4c28b04ad9729b483446a342c24f34a72af41703692d5b
- -itd 参数表示以交互模式(-i)、分配一个伪终端(-t)并以后台模式运行(-d)。
- –name php_websocket 指定容器的名称为 php_websocket。
- -v $(pwd):/www 将当前目录挂载到容器的 /www 目录。
- -p 9501:9501 和 -p 9502:9502 将主机的 9501 和 9502 端口映射到容器的相同端口。
- 最后指定使用的镜像的 SHA256 哈希值 sha256:afd333a4be52a0f36e4c28b04ad9729b483446a342c24f34a72af41703692d5b。
4. 启动容器
进入容器内部,运行
cd /www && composer install
先安装依赖,再启动项目
php bin/hyperf.php start

5. 踩的坑:
- 没有指定镜像版本,拉的最新的版本的镜像:
docker pull hyperf/hyperf
部署容器的没问题,启动项目提示:
[ERROR] DI Reflection Manager collecting class reflections failed.
File: /www/vendor/hyperf/di/src/ClosureDefinitionCollector.php.
Exception: Syntax error, unexpected T_INT_CAST on line 3
[ERROR] DI Reflection Manager collecting class reflections failed.
File: /www/vendor/hyperf/di/src/MetadataCollectorInterface.php.
Exception: Syntax error, unexpected T_INT_CAST on line 3
[ERROR] DI Reflection Manager collecting class reflections failed.
File: /www/vendor/hyperf/di/src/Container.php.
Exception: Syntax error, unexpected T_INT_CAST on line 3
......
