单机用 docker 同时运行 redis、mysql 和 hyperf 的核心是创建自定义 bridge 网络(如 hyperf-net),让三者加入同一网络实现 dns 互通;mysql 和 redis 容器需挂载数据卷并正确配置,hyperf 容器须通过环境变量(db_host=mysql、redis_host=redis)连接服务,且配置文件禁用 localhost,最后分步验证网络、数据库和缓存连通性。

单机用 Docker 同时跑 Redis、MySQL 和 Hyperf 项目,核心是让三者网络互通、配置正确、启动顺序合理。不依赖集群或编排工具(如 Kubernetes),纯 Docker 命令或简单 docker-compose 即可完成,适合开发调试和轻量生产环境。
网络互通是前提
Hyperf 应用必须能连上 Redis 和 MySQL 容器。推荐统一使用自定义 bridge 网络,避免 host 模式带来的端口冲突与权限问题:
- 创建网络:
docker network create hyperf-net - MySQL 容器加入该网络,并暴露 3306 端口(容器内端口固定为 3306):
docker run -d --name mysql --network hyperf-net -e MYSQL_ROOT_PASSWORD=123456 -v ~/docker/mysql/data:/var/lib/mysql -p 3306:3306 mysql:8.0.39 - Redis 容器加入同一网络,不映射宿主机端口也可被 Hyperf 访问:
docker run -d --name redis --network hyperf-net -v ~/docker/redis/data:/data redis:7.2 --appendonly yes - Hyperf 容器也加入
hyperf-net,其配置中数据库 host 填mysql,Redis host 填redis——Docker 内置 DNS 会自动解析容器名
Hyperf 容器需挂载代码并指定启动方式
Hyperf 是 PHP Swoole 框架,不能像 Nginx 那样直接运行官方镜像,需自己构建或挂载已打包的项目:
- 确保项目目录(如
~/projects/my-hyperf)含完整代码、composer.json和config/autoload/database.php、config/autoload/redis.php等配置文件 - 修改数据库配置中的 host 为
mysql,port 保持 3306;Redis 配置中 host 为redis,password 按需填写 - 运行命令示例(基于官方 PHP + Swoole 镜像):
docker run -d --name hyperf-app --network hyperf-net -v ~/projects/my-hyperf:/app -w /app -p 9501:9501 php:8.2-cli sh -c "composer install && php bin/hyperf.php start" - 若项目已预装依赖,可跳过
composer install,直接启动
配置文件要适配容器环境
Hyperf 的 database.php 和 redis.php 中的连接参数,不能写 127.0.0.1 或 localhost,否则会连向容器自身而非对应服务:
- MySQL 配置片段应类似:
'host' => env('DB_HOST', 'mysql'), 'port' => env('DB_PORT', 3306), 'username' => env('DB_USERNAME', 'root') - Redis 配置片段应类似:
'host' => env('REDIS_HOST', 'redis'), 'port' => env('REDIS_PORT', 6379), 'auth' => env('REDIS_AUTH', '') - 环境变量可通过
-e参数传入,例如:-e DB_HOST=mysql -e REDIS_HOST=redis - 建议将敏感信息(密码)通过
.env文件挂载进容器,而不是硬编码在配置里
验证联动是否成功
启动全部容器后,分步确认通信链路畅通:
- 进 Hyperf 容器执行:
docker exec -it hyperf-app ping -c 2 mysql和ping -c 2 redis,确认网络可达 - 进 Hyperf 容器执行:
php bin/hyperf.php db:query "SELECT VERSION()",看能否查出 MySQL 版本 - 进 Hyperf 容器执行:
php bin/hyperf.php redis:info(需提前注册 Redis 命令),或用redis-cli -h redis PING测试 Redis 连通性 - 访问
http://localhost:9501,看接口是否返回预期数据,尤其涉及缓存读写或数据库查询的功能点











