Docker部署Symfony5执行doctrine建库命令报SQLSTATE[HY000]域名解析错误
问题根因及解决方案
1. 首要错误:docker-compose.yml 缩进异常
yaml 语法对缩进高度敏感,你贴出的配置中 php、nginx 服务的缩进层级错误,被识别为 database 服务的子属性,导致三个服务没有运行在同一Docker网络下,自然无法通过服务名互相解析。
修正后的docker-compose.yml完整内容如下:
version: '3.3' services: database: container_name: database image: mysql:8.0 restart: always command: --default-authentication-plugin=mysql_native_password environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: symfony_docker MYSQL_USER: symfony MYSQL_PASSWORD: symfony ports: - '4306:3306' volumes: - ./mysql:/var/lib/mysql php: container_name: php build: context: ./php ports: - '9000:9000' volumes: - ./app:/var/www/symfony_docker depends_on: - database nginx: container_name: nginx image: nginx:stable-alpine ports: - '8080:80' volumes: - ./app:/var/www/symfony_docker - ./nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php - database
2. 修正Symfony .env文件的数据库连接配置
你之前的配置存在3处错误:
- 数据库主机名错误:Docker Compose内部网络通过服务名解析,你的mysql服务名是
database不是mysql - 端口错误:容器之间访问用内部端口
3306,4306是宿主机对外映射的端口,仅外部访问时使用 - 数据库名和版本错误:docker-compose中默认创建的库是
symfony_docker,mysql版本为8.0,和你配置的menukarte、serverVersion=5.7不匹配
将.env中的DATABASE_URL替换为以下内容即可:
DATABASE_URL="mysql://root:secret@database:3306/symfony_docker?serverVersion=8.0"
如果你想用低权限的普通用户连接,也可以用:
DATABASE_URL="mysql://symfony:symfony@database:3306/symfony_docker?serverVersion=8.0"
3. 重启容器验证
执行以下命令清理旧容器并重新启动:
# 停止并删除旧容器、关联卷(避免旧的mysql数据残留影响) docker-compose down -v # 重新构建镜像并后台启动容器 docker-compose up -d --build # 进入php容器执行创建数据库命令 docker exec -it php bash bin/console doctrine:database:create
内容的提问来源于stack exchange,提问作者user16666124
相关产品推荐
相关产品推荐

