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
相关产品推荐
相关产品推荐

