讲师中心 微信公众号
AI工具推荐 视频效率加速

Hyperf3.1 Docker部署怎么配置MySQL协程连接

雨明酱_9611

雨明酱_9611

发布时间:2026-11-05 14:54:27

|

214人浏览过

|

来源于php中文网

原创

Hyperf 3.1 在 Docker 中实现 MySQL 协程连接需满足三要素:PHP ≥ 8.1 且启用 Swoole ≥ 5.0 协程支持、Dockerfile 中显式调用 SwooleRuntime::enableCoroutine(true)、databases.php 正确配置 pool 及 driver => 'mysql',并确保 Docker 网络与环境变量对齐。

hyperf3.1 docker部署怎么配置mysql协程连接

Hyperf 3.1 在 Docker 中部署时,MySQL 协程连接不是靠“Docker 配置”实现的,而是靠容器内 PHP 环境、Swoole 扩展和 Hyperf 的配置三者协同生效。Docker 只是运行环境载体,关键在镜像构建和配置文件是否满足协程 MySQL 的硬性要求。

确保基础运行环境合规

你的 Docker 镜像必须满足以下三点,缺一不可:

  • PHP 版本 ≥ 8.1(推荐 8.3)
  • 已启用 Swoole 扩展,且版本 ≥ 5.0.0,并确认支持协程:
    php --ri swoole 输出中必须含 support coroutines: enabled
  • 已安装 hyperf/db-connection 和 hyperf/database 包(通常通过 composer install 自动完成)

Dockerfile 中需显式启用 Swoole 协程运行时

仅装扩展不够,还需在启动前启用协程支持。在 Dockerfile 的 CMD 或 entrypoint 脚本中加入:

php -r "SwooleRuntime::enableCoroutine(true);" -f bin/hyperf.php start

或更稳妥地,在 bin/start.sh 中写:

#!/bin/sh
php -r "SwooleRuntime::enableCoroutine(true);" -f bin/hyperf.php start

然后在 Dockerfile 中用 CMD ["sh", "bin/start.sh"] 启动。

正确配置 databases.php 连接池(核心步骤)

打开 config/autoload/databases.php,MySQL 配置块中必须包含 pool 子数组,且 driver 必须为 'mysql'(非 pdo_mysql):

'mysql' => [
  'driver' => env('DB_DRIVER', 'mysql'),
  'host' => env('DB_HOST', 'mysql'),
  'port' => (int) env('DB_PORT', 3306),
  'database' => env('DB_DATABASE', 'hyperf'),
  'username' => env('DB_USERNAME', 'root'),
  'password' => env('DB_PASSWORD', ''),
  'charset' => env('DB_CHARSET', 'utf8mb4'),
  'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
  'prefix' => env('DB_PREFIX', ''),
  'strict' => true,
  'pool' => [
    'min_connections' => 2,
    'max_connections' => 20,
    'connect_timeout' => 5.0,
    'wait_timeout' => 3.0,
    'heartbeat' => -1,
    'max_idle_time' => 60.0,
  ],
],

注意:
• DB_HOST 不要写 localhost,应填 Docker 网络中 MySQL 服务名(如 mysql)
• .env 中 DB_DRIVER 必须是 mysql,不能是 pdo_mysql 或 mysqli
• 若用 Swow 引擎,则需改用 Swow 专用 pool 参数并删掉旧 pool 结构

docker-compose.yml 网络与环境对齐

确保 Hyperf 容器能访问 MySQL 容器,且环境变量传递正确:

services:
  app:
    build: .
    environment:
      - DB_DRIVER=mysql
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_DATABASE=hyperf
      - DB_USERNAME=root
      - DB_PASSWORD=123456
    depends_on:
      - mysql
    networks:
      - hyperf-net
<p>mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: hyperf
ports:</p><ul><li>"3306:3306"
networks:</li><li>hyperf-net

networks 必须统一,避免因默认 bridge 网络导致 DNS 解析失败。

验证协程连接是否真正生效

部署后,进容器执行一次并发查询测试:

php -r "
$container = require_once __DIR__.'/runtime/container.php';
$conn = $container->get(HyperfDatabaseConnection::class);
go(function() use ($conn) {
  $start = microtime(true);
  $conn->select('SELECT SLEEP(1)');
  $conn->select('SELECT SLEEP(1)');
  echo '总耗时: ' . round(microtime(true) - $start, 2) . "s\n";
});"

若输出约 1.0x 秒(而非 2.x 秒),说明协程连接池已正常工作。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2493

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1499

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

875

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3532

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

6088

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1299

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6351

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5462

2023.08.14

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Hyperf官方中文手册(3.1)
Hyperf官方中文手册(3.1)

共0课时 | 0人学习

Swoole系列-从0到1-新手进阶
Swoole系列-从0到1-新手进阶

共29课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn