workerman启动失败主因是pcntl/posix扩展未启用、启动命令缺start参数、监听地址未设0.0.0.0及端口映射错位;需在docker中显式安装两扩展、用php start.php start启动、正确配置网络并验证php -m输出。

pcntl 和 posix 扩展必须显式安装
Workerman 启动失败、容器秒退,90% 是因为 pcntl_signal() 或 posix_kill() 报错。PHP 官方 CLI 镜像(包括 php:8.1-cli、php:8.3-cli-alpine)默认不启用这两个扩展,哪怕 PHP 版本 ≥8.1 也不行。
常见错误现象:Fatal error: Uncaught Error: Call to undefined function pcntl_signal();或 Worker::runAll() 根本没执行,日志里只有一行就退出。
- Debian/Ubuntu 基础镜像:用
docker-php-ext-install pcntl posix - Alpine 镜像:先装构建依赖,再用
pecl install pcntl && docker-php-ext-enable pcntl,同理处理posix - 验证是否生效:
docker run --rm your-image php -m | grep -E "pcntl|posix"必须有输出
start.php 必须用 CLI 模式启动,且带 start 参数
Workerman 不是 Web 应用,不能走 FPM 或 Nginx + PHP-FPM 流程。它只响应命令行指令,php start.php start 是唯一合法入口。漏掉 start 参数,进程会直接进入交互式 CLI 环境然后退出。
典型误操作:
-
CMD ["php", "start.php"]→ 缺少start,挂了 -
ENTRYPOINT ["php", "start.php"]但没配CMD,等价于只执行php start.php - 在
docker-compose.yml里写command: php-fpm→ 完全无效
推荐写法(Dockerfile):
ENTRYPOINT ["php", "start.php"] CMD ["start"]
这样既支持覆盖启动参数(比如加 -d memory_limit=512M),又避免硬编码完整命令。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
监听地址必须设为 0.0.0.0,端口映射必须对齐
代码里写 $worker->listen('tcp://127.0.0.1:2345'),容器外绝对连不上——Docker 网络模型下,127.0.0.1 指的是容器自身,不是宿主机。
端口错位也高频出问题:
- 代码监听
tcp://0.0.0.0:2345,但docker-compose.yml写- "8080:2345"→ 正确 - 代码监听
tcp://0.0.0.0:2345,却写成- "2345:8080"→ 宿主机 2345 端口连的是容器 8080,服务根本不在那儿 - WebSocket 场景下只映射了 HTTP 端口(如 80),忘了映射 WS 对应端口(如 2346)→ 前端报
WebSocket connection to ... failed
Dockerfile 示例要区分基础镜像类型
Alpine 和 Debian 镜像的扩展安装逻辑不同,混用会导致构建失败或运行时缺失函数。
Alpine 示例(推荐轻量部署):
FROM php:8.2-cli-alpine
WORKDIR /app
COPY . .
RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
&& pecl install pcntl && docker-php-ext-enable pcntl \
&& pecl install posix && docker-php-ext-enable posix \
&& apk del .build-deps
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& composer install --no-dev --optimize-autoloader
ENTRYPOINT ["php", "start.php"]
CMD ["start"]
Debian 示例(兼容性更强):
FROM php:8.2-cli
WORKDIR /app
COPY . .
RUN apt-get update && apt-get install -y libevent-dev && rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install pcntl posix sockets event
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& composer install --no-dev --optimize-autoloader
ENTRYPOINT ["php", "start.php"]
CMD ["start"]
别忽略 libevent-dev —— 它是 event 扩展的编译依赖,而 Workerman 在高并发场景下常靠它提升 I/O 性能。没装它,event 扩展编译会静默失败,后续也调用不了。










