Symfony 5 Docker多容器环境下make:migration报错求助
make:migration的数据库连接错误 错误核心原因
你遇到的SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mariadb failed错误,本质是Symfony所在的PHP容器无法解析MariaDB容器的主机名,属于Docker容器网络配置或Symfony数据库配置问题。
分步解决步骤
1. 核对Docker Compose中的MariaDB服务名
打开你的docker-compose.yml文件,确认MariaDB容器的服务名称是否为mariadb:
services: mariadb: # 这里的名称必须和Symfony配置里的主机名一致 image: mariadb:10.3 # 其他配置...
如果服务名不是mariadb(比如叫db),后续配置里的主机名要对应修改。
2. 修正Symfony的数据库连接配置
打开项目根目录的.env(或.env.local)文件,确保DATABASE_URL的主机部分和Docker服务名完全一致:
# 正确示例(服务名为mariadb时) DATABASE_URL="mysql://你的数据库用户名:你的数据库密码@mariadb:3306/你的数据库名?serverVersion=mariadb-10.3"
⚠️ 注意:不要用localhost或127.0.0.1——在Docker容器内,localhost指向容器自身,而非宿主机或其他容器。
3. 确认容器网络与运行状态
- 检查所有容器是否在同一个网络:运行
docker-compose ps,确认Symfony(PHP)容器和MariaDB容器的NETWORK列值相同。 - 确认MariaDB容器正在运行:如果状态是
Exit,执行docker-compose up -d mariadb启动容器。
4. 在PHP容器内测试连通性
进入Symfony所在的PHP容器,直接测试MariaDB的连通性:
# 替换为你的PHP容器服务名(比如php、app等) docker-compose exec php bash # 测试主机名解析 ping mariadb # 测试数据库连接(替换为你的数据库用户名) mysql -h mariadb -u 你的数据库用户名 -p
如果ping不通或mysql连接失败,说明Docker网络存在问题,可尝试重启所有容器:docker-compose down && docker-compose up -d。
5. 清理Symfony缓存
容器网络配置更新后,Symfony可能缓存了旧的连接信息,执行缓存清理:
# 在PHP容器内执行 php bin/console cache:clear --env=dev
关于Deprecated提示的补充
你看到的Relying on a fallback connection used to determine the database platform警告,是因为数据库名称可能不存在。解决完连通性问题后,确保DATABASE_URL中的数据库名已在MariaDB中创建,或暂时移除数据库名(需MariaDB配置允许)。
内容的提问来源于stack exchange,提问作者FS Videos

