Symfony-Docker替换PostgreSQL为MySQL后数据库连接失败求助
问题解决:Symfony Docker 替换MySQL后无法连接数据库
核心问题分析
你的配置存在三个关键错误,导致PHP容器无法连接到MySQL:
- MySQL镜像的环境变量名错误,数据库未自动创建
- DATABASE_URL中的主机、端口和MySQL版本参数配置错误
- PHP服务未依赖数据库服务,启动顺序不合理
具体修复步骤
1. 修正MySQL服务的环境变量
官方MySQL镜像使用MYSQL_DATABASE而非MYSQL_DB来指定初始数据库名,修改docker-compose.yml中database服务的环境变量:
###> doctrine/doctrine-bundle ### database: image: mysql:8.0 environment: MYSQL_DATABASE: ${MYSQL_DB:-gk_app} # 替换原MYSQL_DB为MYSQL_DATABASE MYSQL_PASSWORD: ${MYSQL_PASSWORD:-password} MYSQL_ALLOW_EMPTY_PASSWORD: "true" volumes: - db-data:/var/lib/mysql ###< doctrine/doctrine-bundle ###
2. 修正PHP服务的DATABASE_URL
- 主机名使用Docker内部服务名
database(而非gk_app/localhost/127.0.0.1) - 端口使用容器内部的
3306(而非主机映射的3567) - serverVersion改为MySQL 8.0对应的
8.0(而非PostgreSQL的13)
修改docker-compose.yml中php服务的DATABASE_URL:
environment: DATABASE_URL: mysql://${MYSQL_USER:-root}:${MYSQL_PASSWORD:-password}@database:3306/${MYSQL_DB:-gk_app}?serverVersion=8.0&charset=utf8
3. 添加PHP对数据库服务的依赖
确保PHP在数据库启动后再尝试连接,在docker-compose.yml的php服务中添加depends_on:
services: php: build: # 保留原有build配置 restart: unless-stopped depends_on: - database # 新增依赖配置 volumes: # 保留原有volumes配置 # 保留后续其他配置
4. 清理旧容器和卷(可选但推荐)
之前的错误配置可能留下无效的数据库卷,执行以下命令重置环境:
docker-compose down -v HTTP_PORT=8080 HTTPS_PORT=8443 SERVER_NAME=foo.localhost docker-compose up
验证修复
启动后执行docker ps,应能看到php、caddy、database所有服务正常运行,不再出现数据库等待的错误提示。
内容的提问来源于stack exchange,提问作者cookie
相关产品推荐
相关产品推荐

