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

