Docker部署Workerman并连接MySQL与Redis实战

周予安
周予安
发布时间:2026-10-16 | 9人浏览过
原创

本文详细介绍如何在Docker容器中搭建PHP环境以运行Workerman框架,并配置MySQL 5.7和Redis服务。通过容器化部署,解决依赖安装、端口映射及远程访问设置等问题,确保GatewayWorker项目稳定运行。

准备基础镜像与环境

在开始部署之前,需要准备好数据库、缓存以及PHP运行环境的Docker镜像。本例选用 MySQL 5.7 作为数据库,PHP 7.3 FPM 作为运行环境。

第1步:配置MySQL服务

目的:创建独立的MySQL容器,用于存储业务数据,并允许外部(如PHP容器)通过局域网IP访问。

  1. 拉取镜像:使用官方仓库获取指定版本的MySQL镜像。
docker pull mysql:5.7
  1. 启动容器:运行MySQL容器,映射宿主机端口到容器内部,并设置root密码。
    参数说明:
    - -d:后台运行容器。
    - -p 3306:3306:将宿主机的3306端口映射到容器的3306端口。
    - -e MYSQL_ROOT_PASSWORD=root:设置初始root用户密码为root(生产环境请修改)。
    - --name m_mysql:指定容器名称以便后续管理。
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name m_mysql mysql:5.7

远程连接设置:默认情况下,MySQL出于安全考虑禁止远程连接。若PHP容器需要通过主机IP或跨网络访问,需开启权限。

  1. 进入容器终端:使用exec命令进入正在运行的MySQL容器。
docker exec -it m_mysql /bin/bash

常用参数参考:
- -i/--interactive:保持标准输入打开。
- -t/--tty:分配伪终端。

  1. 执行SQL授权语句:登录MySQL并赋予root用户所有权限。
mysql -uroot -proot
use mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;

完成状态判断:执行完上述SQL后,刷新权限即可生效。此时可通过宿主机IP从其他容器连接该MySQL实例。

第2步:构建PHP运行环境

目的:创建包含Workerman所需扩展的PHP容器,挂载代码目录,便于调试和运行。

  1. 拉取基础PHP镜像:
docker pull php:7.3-cli
  1. 启动PHP容器:使用FPM模式运行,并挂载本地项目目录。
docker run --name myphp -p 8282:8282 -v /home/wwwroot:/www -d php:7.3-fpm

关键参数说明:
- -v /home/wwwroot:/www:将宿主机路径映射到容器内的/www目录,实现代码同步。
- -p 8282:8282:映射端口,如需监听其他端口可追加多个-p。

安装Workerman依赖扩展:PHP镜像默认为精简版,需手动安装event、pcntl、sockets等扩展。
注意:由于基于Debian/Ubuntu系的镜像,使用apt-get更新源并安装包,随后通过docker-php-ext-install编译安装PHP扩展。

  1. 进入容器执行安装命令:
apt-get install libevent-dev
docker-php-ext-install pcntl sockets event pdo_mysql redis
  • pdo_mysql:提供PDO MySQL驱动。
  • redis:提供Redis客户端支持。
  • event、pcntl、sockets:Workerman核心依赖。

风险提示:生产环境中建议通过Dockerfile构建自定义镜像以固化环境,避免每次启动都需要重新安装扩展。

第3步:启动Workerman应用

操作入口:在挂载的代码目录/www中找到项目的启动文件(通常为start.php)。

  1. 进入容器工作目录:
docker exec -it myphp bash
cd /www
  1. 前台或后台启动:
    通常使用-d参数以守护进程方式启动。
php start.php start -d

上图为成功启动后的界面示意。确认无报错日志输出即为启动成功。

总结与排错

本教程完成了Docker环境下MySQL、Redis和PHP Workerman的联调部署。常见问题排查如下:

  • 连接拒绝:检查MySQL是否已开放远程权限(root@'%'),并确保防火墙放行3306端口。
  • 扩展缺失:若启动报“Class not found”,通常是未正确安装event或swoole等扩展,需重新进入容器执行安装脚本。
  • 代码不同步:确认宿主机/home/wwwroot下的文件权限是否正确,且已被挂载到容器内。

以上就是Docker部署Workerman并连接MySQL与Redis的详细内容,更多关于Docker运行Workerman及PHP环境配置的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表