You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个使用PostgreSQL的DDEV项目同时运行出现异常干扰如何排查?

问题根源

1. 配置逻辑语法错误

两个项目的settings.ddev.php中主机侧Drush判断逻辑写法错误,原代码:

if (empty(getenv('DDEV_PHP_VERSION') && getenv('IS_DDEV_PROJECT') == 'true')) {

括号位置错误导致逻辑完全不符合预期,会误将容器内运行的Web请求判定为本地Drush执行,把数据库地址指向127.0.0.1,进而随机连接到本机端口映射的另一个项目PostgreSQL实例,这是页面刷新随机报错/恢复的核心原因。

2. 本地端口配置错误

  • Drupal 7的settings.ddev.php中将本地Drush连接端口写为Drupal 9对应的32784,导致主机侧执行Drupal 7的drush sqlc时默认连接到Drupal 9的数据库,因此会看到Drupal 9的表结构。
  • Drupal 9的settings.ddev.php中将本地端口设为-1属于无效值,会进一步加剧连接混乱。

3. 存储独立无需担心

从你提供的docker volume ls结果看,两个项目的PostgreSQL存储卷是完全独立的,不存在共享存储的问题,此前的数据交叉是连接了错误数据库实例导致的,不会出现存储层混写。


修复步骤

  1. 修复两个项目settings.ddev.php的判断逻辑,替换原if条件为:
// 仅当在主机侧执行Drush时才使用本地地址和端口
if (empty(getenv('DDEV_PHP_VERSION')) && getenv('IS_DDEV_PROJECT') == 'true') {
  1. 修正Drupal 7的本地端口配置,将$port = 32784;改为$port = 32785;
  2. 修正Drupal 9的本地端口配置,将$port = -1;改为$port = 32784;
  3. 分别在两个项目目录执行ddev restart重启项目使配置生效
  4. 验证:同时启动两个项目后,分别执行ddev drush sqlc查看表结构,确认不会交叉显示对方的表,多次刷新前端页面确认无报错即可。

内容的提问来源于stack exchange,提问作者felmab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:54:03