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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:03:00