Docker环境执行make:migrations遇SQLSTATE[HY000] [2002]连接拒绝
问题解决:Docker中PHP容器连接MySQL拒绝访问
核心原因
在Docker Compose默认网络里,每个容器是独立的网络节点。你的.env文件用127.0.0.1作为数据库地址,在PHP容器内部,这个地址指向的是PHP容器自身,而非MySQL容器,因此触发连接拒绝错误。
解决方案
1. 修改数据库连接配置
更新.env文件中的DATABASE_URL,将127.0.0.1替换为Docker Compose里MySQL服务的名称mysql:
DATABASE_URL="mysql://root:root@mysql:3306/user_database?serverVersion=8.0.39&charset=utf8mb4"
注意:此处密码
root需与MySQL容器配置的MYSQL_ROOT_PASSWORD保持一致(你的配置中两者匹配)。
2. 重启服务生效配置
执行命令重启PHP容器(或整个Compose服务):
docker-compose restart php # 或者重启所有服务 docker-compose down && docker-compose up -d
3. 验证连接
进入PHP容器重新执行迁移命令:
docker exec -it user-php php bin/console make:migrations
额外说明
你能通过docker exec和DBeaver连接数据库的原因:
docker exec直接进入MySQL容器时,属于容器本地连接,自然能访问;- DBeaver使用主机的
127.0.0.1:3306,对应MySQL容器映射到主机的端口,属于主机到容器的外部访问,逻辑和容器内部网络不同。
内容的提问来源于stack exchange,提问作者user3447780
相关产品推荐
相关产品推荐

