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

Symfony 5 Docker多容器环境下make:migration报错求助

解决Symfony + Docker多容器环境下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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:40:30