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

Api-platform仅用MongoDB:移除PostgreSQL服务后启动超时的解决方法

移除PostgreSQL服务并解决API Platform启动超时问题

问题背景

你已配置API Platform使用MongoDB ODM,但应用启动时仍会等待PostgreSQL连接导致超时。以下是需要修改的配置项,以彻底移除PostgreSQL服务并保持环境整洁:

1. 修改docker-compose.yml配置

删除PostgreSQL服务块

直接移除docker-compose.yml中整个database(PostgreSQL)服务定义:

原PostgreSQL服务配置:

database:
    image: postgres:13-alpine
    environment:
      - POSTGRES_DB=api
      - POSTGRES_PASSWORD=!ChangeMe!
      - POSTGRES_USER=api-platform
    volumes:
      - db_data:/var/lib/postgresql/data:rw
      # you may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
      # - ./api/docker/db/data:/var/lib/postgresql/data:rw
    expose:
      - 5433

优化MongoDB服务配置

将原共享的db_data卷改为独立的mongodb_data,避免数据混淆,同时确保端口映射清晰:

db-mongodb:
    # In production, you may want to use a managed database service
    image: mongo
    environment:
      - MONGO_INITDB_DATABASE=api
      - MONGO_INITDB_ROOT_USERNAME=api-platform
      # You should definitely change the password in production
      - MONGO_INITDB_ROOT_PASSWORD=!ChangeMe!
    volumes:
      - mongodb_data:/var/lib/mongodb/data:rw
      # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
      # - ./docker/db/data:/var/lib/mongodb/data:rw
    ports:
      - "27017:27017"

同时在docker-compose.yml的volumes根节点添加:

volumes:
  mongodb_data: {}

2. 更新PHP服务环境变量

确保PHP容器不再指向PostgreSQL,替换为MongoDB连接字符串:
在docker-compose.yml的php服务中,修改环境变量:

php:
    # ... 其他原有配置 ...
    environment:
      # 移除所有PostgreSQL相关的DATABASE_URL配置
      - MONGODB_URL=mongodb://api-platform:!ChangeMe!@db-mongodb:27017/api?authSource=admin
      # ... 其他环境变量 ...

3. 移除PostgreSQL连接检查

启动超时日志来自PHP容器的启动脚本,该脚本在等待PostgreSQL连接。需修改启动逻辑:

  • 找到php服务的entrypoint或command配置
  • 删除等待PostgreSQL的代码,改为直接启动应用(或添加MongoDB等待逻辑,可选)

示例修改:

php:
    # ... 其他原有配置 ...
    command: php -S 0.0.0.0:8000 -t public

4. 卸载Doctrine ORM依赖

由于仅使用MongoDB ODM,移除Doctrine ORM相关包:

composer remove doctrine/doctrine-bundle doctrine/orm doctrine/dbal symfony/orm-pack

5. 清理Symfony配置文件

  • 删除或重命名config/packages/doctrine.yaml(ORM配置文件)
  • 确保config/packages/doctrine_mongodb.yaml配置正确:
doctrine_mongodb:
    connections:
        default:
            uri: '%env(resolve:MONGODB_URL)%'
    document_managers:
        default:
            auto_mapping: true
            mappings:
                App:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Document'
                    prefix: 'App\Document'
                    alias: App

验证修改

完成所有配置后,重新启动容器:

docker-compose down -v && docker-compose up -d

应用将直接连接MongoDB,不再出现PostgreSQL连接超时问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:50:27