SQLSTATE[HY000] [2002] 在 - api 平台和 symfony 6 中没有这样的文件或目录

问题描述 投票:0回答:2

我正在使用 symfony 6 和 PHP 8 运行 docker 项目,但收到错误:

“驱动程序中发生异常:SQLSTATE[HY000] [2002] 没有这样的 中的文件或目录。 (正在从 “/app/config/routes/api_platform.yaml”)。确保有装载机 支持“api_platform”类型。”

我正在尝试使用api平台显示GET请求。

从这个错误中,我认为可能是数据库连接(mariadb 数据库),但我检查了一下,没有问题。

在我的.env中:

DATABASE_URL="mysql://admin@localhost:3307/databasetest"

带有api平台swagger的symfony服务器的url:

http://127.0.0.1:8000/api

我认为这是因为我使用的实体仍然有注释而不是属性,尽管在 symfony 6 中,所以我使用 ector 包来升级带有属性的实体文件。我还向所有属性添加了 getter 和 setter。

我不明白为什么消息中的错误指向api平台?

我确实在没有 docker 且使用 SQL 数据库的情况下运行了一个类似的项目,并且运行良好。 我在它的 .env 中有这个:

DATABASE_URL="mysql://[email protected]:3306/databasetest?serverVersion=8&charset=utf8mb4"

我尝试在最后添加版本,但不是这样:

DATABASE_URL="mysql://admin@localhost:3307/databasetest?serverVersion=10&charset=utf8mb4"

(至少添加了版本的DATABASE_URL,显示http://127.0.0.1:8000/api,但是错误“驱动程序中发生异常:SQLSTATE[HY000] [2002]没有这样的文件或目录”仍然存在) 请问有什么建议吗?


编辑:我想我有解决方案:

我不确定问题何时或为何得到解决,因为我已经尝试过 中间有几件事,但使用服务名称 DATABASE_URL:

DATABASE_URL="mysql://admin@database:3306/databasetest" 或 DATABASE_URL="mysql://admin@database:3306/databasetest?serverVersion=10&charset=utf8"

它有效......我想我一开始就尝试过这个?所以我不确定 如果我尝试的改变真的起作用了

感谢@Hans Kilian 再次指出服务名称 docker-compose

  • PHP 实例似乎无法与数据库服务通信

但是不行,因为我需要使用:

DATABASE_URL="mysql://admin@database:3306/databasetest"

如果我想使用api平台,但我需要使用:

DATABASE_URL="mysql://admin@localhost:3307/databasetest"

如果我想更改数据库中的数据,或者使用 symfony 命令,例如“php bin/console make:migration”,这会导致错误“”驱动程序中发生异常:SQLSTATE[HY000] [2002] 没有这样的文件或目录”在api平台上进行API请求时

这是 docker-compose.yml:

services:
  database:
    ports:
      - '3307:3306'

所以我的最后一个问题是找到一个 DATABASE_URL ,它使 api 平台和 symfony 命令都可以工作,如果有人有任何建议的话......

docker symfony api-platform.com
2个回答
1
投票

我建议您将container_name添加到数据库服务中,这样您就可以在.env文件中将其作为网络调用:

###> doctrine/doctrine-bundle ###
  database:
    container_name: "my_database"
    ...
    ...
###< doctrine/doctrine-bundle ###

然后将 localhost 替换为 .env 文件中的容器名称:

DATABASE_URL="mysql://admin@my_database:3307/databasetest"

请注意,我不知道这是否是最好的解决方案,但它对于开发环境来说效果很好。


0
投票

我有类似的问题,我通过删除这一行解决了它

services:
  php:
    # I passed an env file ... for no reason ^^' 
    env_file:
      - app/.env

来自我的

compose.yml
文件,但我仍然不确定背后的问题是什么...但它肯定在我的 php 和数据库服务之间造成了错误,套接字不可用...

© www.soinside.com 2019 - 2024. All rights reserved.