推荐使用官方 PHP Alpine 镜像(如 php:8.2-cli-alpine),因其体积小、启动快,适合云原生场景;若需调试或兼容旧扩展,可选 Debian 系镜像,但体积大 3–4 倍;Swoole 5.x 要求 PHP ≥ 8.0,须版本匹配,Dockerfile 中应通过 apk/apt 安装编译依赖后用 pecl install swoole 并启用扩展,构建阶段用 php -m 验证,生产环境建议 volume 挂载代码、配置及日志,EXPOSE 并映射 9501 端口,CMD 设为对应启动命令。

选对基础镜像很关键
推荐用官方 PHP Alpine 镜像,比如 php:8.2-cli-alpine 或 php:8.1-fpm-alpine。Alpine 体积小、启动快,适合云原生场景;若需调试或兼容旧扩展,可选 Debian 系(如 php:8.2-cli),但镜像体积大 3–4 倍。
注意:Swoole 4.x 要求 PHP ≥ 7.2,Swoole 5.x 要求 PHP ≥ 8.0。务必核对版本匹配,避免 pecl install swoole 编译失败。
Dockerfile 中安装 Swoole 扩展
在 Dockerfile 里直接编译安装最可靠,避免运行时手动操作。关键步骤如下:
- 先装编译依赖:
RUN apk add --no-cache gcc g++ make autoconf(Alpine)或RUN apt-get update && apt-get install -y gcc g++ make autoconf(Debian) - 再装 Swoole:
RUN pecl install swoole && docker-php-ext-enable swoole - 可选:启用协程支持(Swoole 4.5+ 默认开启),如需禁用可加
--enable-coroutine=off参数 - 验证安装:
RUN php -m | grep swoole(构建阶段检查,失败即中断)
挂载代码与配置分离
生产环境不建议把代码 COPY 进镜像,应通过 volume 挂载,便于热更新和配置管理:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 宿主机项目根目录(含
server.php、composer.json)挂载到容器/app - PHP 配置(如
php.ini)单独挂载,路径通常为/usr/local/etc/php/conf.d/swoole.ini - 日志目录也建议挂载(如
/app/storage/logs),方便采集和轮转
示例 docker-compose.yml 片段:
volumes:<br> - ./src:/app<br> - ./config/php.ini:/usr/local/etc/php/php.ini<br> - ./logs:/app/storage/logs
启动服务与端口映射
Swoole HTTP 服务默认监听 0.0.0.0:9501,Docker 中需显式暴露并映射:
- Dockerfile 加
EXPOSE 9501 - docker run 用
-p 9501:9501;compose 中写ports: ["9501:9501"] - 入口命令设为
CMD ["php", "/app/server.php"],确保脚本有执行权限 - 若用 Hyperf/EasySwoole 等框架,CMD 改为对应启动命令,如
CMD ["php", "bin/hyperf.php", "start"]
启动后访问 http://localhost:9501 即可验证,日志可通过 docker logs -f 容器名 实时查看。

















