Docker容器中MongoDB超时时间修改求助:从30秒改至2分钟
解决Docker环境下MongoDB(Doctrine)30秒超时问题
嘿,我来帮你搞定这个超时难题!你碰到的{"code":500,"message":"Error: Maximum execution time of 30 seconds exceeded"}错误,其实是PHP脚本执行限制和Doctrine MongoDB连接配置共同作用的结果,咱们一步步来调整:
1. 先搞定PHP本身的脚本超时限制
这个错误提示直接指向PHP的max_execution_time默认值(30秒),得先把这个改了:
- 如果你的PHP是跑在Docker容器里的PHP-FPM:
找到PHP的配置文件(比如容器里的/usr/local/etc/php/php.ini,或者自定义的conf.d/99-overrides.ini),添加或修改:
改完之后重启PHP-FPM容器或者整个服务就行。max_execution_time = 120 ; 改成2分钟=120秒 - 要是不想全局修改,也可以在Symfony的控制器里临时设置(仅限当前请求):
ini_set('max_execution_time', 120);
2. 调整Doctrine MongoDB的连接超时配置
你之前在config.yml里的配置没补全超时参数,正确的配置应该在连接的options里加上超时设置:
doctrine_mongodb: default_database: "%mongodb_database%_%kernel.environment%" default_document_manager: default connections: default: server: "mongodb://%mongodb_host%:%mongodb_port%" options: connectTimeoutMS: 120000 ; 连接MongoDB的超时,2分钟(毫秒) socketTimeoutMS: 120000 ; 读写操作的超时,2分钟(毫秒)
这里两个参数都要设置:connectTimeoutMS是建立连接时的超时,socketTimeoutMS是执行查询、写入等操作时的读写超时,都设为120000毫秒(也就是2分钟)。
3. 额外排查:Docker网络超时(可选)
如果你的MongoDB也是跑在Docker容器里,还要确认Docker网络有没有额外的超时限制——不过一般默认配置下不会有这么短的超时,这一步可以作为后续排查项,先搞定前面两步再说。
验证配置是否生效
- 进PHP容器里跑
php -i | grep max_execution_time,看看脚本超时是不是已经改成120秒了; - 在Symfony项目里跑
bin/console debug:config doctrine_mongodb,检查Doctrine的配置里有没有正确加载那两个超时参数。
内容的提问来源于stack exchange,提问作者Maqsood
相关产品推荐
相关产品推荐

