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

Docker部署Symfony3 PHP应用连接MySQL报错:找不到驱动

解决Symfony 3 + Docker环境下"could not find driver"数据库连接错误

这个报错直接戳中了核心问题:你的PHP-FPM容器里缺少MySQL的PDO驱动!官方的php:7.1-fpm镜像默认没预装这个扩展,Doctrine自然没法和MySQL建立通信。下面是一步步的解决步骤:

1. 构建带PDO驱动的自定义PHP镜像

官方PHP镜像提供了docker-php-ext-install工具来快速安装扩展,我们需要创建一个自定义Dockerfile来补上pdo_mysql:

在项目根目录新建Dockerfile-php文件,内容如下:

FROM php:7.1-fpm

# 安装MySQL PDO驱动
RUN docker-php-ext-install pdo_mysql

2. 修改docker-compose.yaml配置

把原来的php服务改成使用我们自定义构建的镜像,替换掉官方镜像:

php:
  build:
    context: .
    dockerfile: Dockerfile-php
  volumes:
    - ./.code:/var/www/html

同时,确保你的db服务配置完整(指定兼容的MySQL版本、设置必要环境变量),示例配置:

db:
  image: mysql:5.7  # Symfony 3推荐用MySQL 5.7,避免8.0的兼容性问题
  environment:
    MYSQL_ROOT_PASSWORD: your_root_password
    MYSQL_DATABASE: your_app_db_name
    MYSQL_USER: your_db_user
    MYSQL_PASSWORD: your_db_user_password
  volumes:
    - db_data:/var/lib/mysql  # 持久化数据库数据,防止容器销毁后数据丢失

3. 修正Symfony数据库配置

打开Symfony项目的app/config/parameters.yml(如果用了DotEnv就改.env文件),注意数据库主机名要写db——这是docker-compose里db服务的名称,容器之间通过服务名互相通信,写localhost或127.0.0.1只会指向当前(addrannEND highly施加机器人成 Judawt(-(N弱做容器自身,根本找不到数据库服务:

parameters:
    database_host: db
    database_port: 3306
    database_name: your_app_db_name
    database_user: your_db_user
    database_password: your_db_user_password

4. 重新启动容器

执行以下命令重新构建PHP镜像并启动所有服务:

docker-compose build php
docker-compose up -d

额外小提醒

  • depends_on只是保证容器启动顺序,不保证MySQL服务完全就绪。如果还是连接失败,可以等个10秒左右重启app/php容器,或者给db服务加healthcheck来确保MySQL启动完成后再启动PHP服务。
  • 确认你的项目代码挂载路径./.code:/var/www/html是正确的,Symfony的入口文件能被容器正常访问到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:23:59