Docker部署MySQL后本地执行Doctrine Migration无法访问数据库问题
问题原因
你出现这个报错的核心原因是域名解析问题:
- 你的.env配置里写的数据库主机名是
db,这是Docker Compose为同网络下容器分配的内部服务域名,只有运行在同一Docker网络中的容器才能识别并解析这个域名 - 你是在宿主机(容器外部)执行的Doctrine迁移命令,宿主机的DNS没有
db这个域名的映射,自然无法找到对应的数据库地址 - 而PhpMyAdmin可以正常访问,是因为它本身也是Docker Compose启动的容器,和MySQL服务在同一网络下,可以正常解析
db域名
解决方案
你可以二选一:
- 如果坚持在宿主机执行迁移命令
修改你的.env配置,将数据库主机地址从db改为127.0.0.1即可,因为你已经在docker-compose中把MySQL的3306端口映射到了宿主机的3306端口:
BDD = pdo-mysql://root:root@127.0.0.1:3306/playlist_maker_multi
注意这种方式会导致你把代码放到web-server容器里运行时需要把地址改回db,容易出现环境不一致的问题。
提示:如果你的宿主机本地也运行了MySQL服务占用了3306端口,第一种方案可能会连接到本地的MySQL而非Docker中的MySQL服务,优先推荐使用第二种方案。
- 更推荐的规范做法:在容器内执行迁移命令
直接通过docker compose exec在web-server容器中执行迁移命令,不需要修改任何配置,和线上运行环境完全一致:
docker compose exec web-server ./vendor/bin/doctrine-migrations status
内容的提问来源于stack exchange,提问作者Camille Hurtaud
相关产品推荐
相关产品推荐

