能,Workerman 5.2.3 可在 Docker 中稳定运行,但需手动安装 pcntl/posix 扩展、监听地址设为 0.0.0.0、用 CLI 模式执行 php start.php start 启动,并正确映射端口。

Workerman 5.2.3 可以在 Docker 环境中直接安装运行,但关键不是“装 Workerman”,而是构建一个具备运行条件的 PHP 容器环境。Workerman 本身是纯 PHP 库,通过 Composer 引入即可,真正需要手动处理的是底层扩展和启动方式。
必须安装 pcntl 和 posix 扩展
Workerman 5.2.3 依赖 pcntl(进程控制)和 posix(系统接口)才能启动多进程、响应信号、实现优雅重启。PHP 官方 CLI 镜像默认不启用这两个扩展,必须显式安装:
- Debian/Ubuntu 基础镜像(如
php:8.1-cli):RUN docker-php-ext-install pcntl posix - Alpine 镜像(如
php:8.1-cli-alpine):RUN apk add --no-cache $PHPIZE_DEPS && pecl install pcntl && docker-php-ext-enable pcntl
注意:Alpine 上posix通常已内置,无需额外安装;若报错,可补apk add php-posix
验证是否生效:docker run --rm your-image php -m | grep -E "pcntl|posix" —— 应输出两行对应模块。
用 Composer 安装 Workerman 5.2.3
在 Dockerfile 中添加以下步骤(推荐使用 --no-dev --optimize-autoloader 减小镜像体积):
- 先安装 Composer:
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - 再安装指定版本:
RUN composer require workerman/workerman:5.2.3
确保项目根目录下有 start.php 入口文件,并已正确 require autoload:require_once __DIR__ . '/vendor/autoload.php';
监听地址必须设为 0.0.0.0
Workerman 默认绑定 127.0.0.1,这在容器内会导致外部无法访问。代码中需显式指定容器内网监听地址:
- 错误写法:
$worker = new Worker('text://127.0.0.1:2345'); - 正确写法:
$worker = new Worker('text://0.0.0.0:2345');
同时,在 docker run 或 docker-compose.yml 中做端口映射,例如:-p 2345:2345(宿主机 2345 → 容器 2345)
启动命令必须带 start 参数
Workerman 是 CLI 守护进程,不能靠 FPM 或 Web 服务器驱动。Docker 启动命令必须明确执行 start 操作:
- 错误:
CMD ["php", "start.php"]→ 进入交互式 CLI,不启动服务 - 正确(推荐):
ENTRYPOINT ["php", "start.php"]<br>CMD ["start"]
这样既支持默认启动,也允许覆盖参数(如docker run ... start -d)
若用 docker-compose.yml,确保 command 字段完整:command: php start.php start


















