首页 > 解决方案 > 无法通过学说连接mongodb

问题描述

我正在和几个朋友一起做一个上学的项目。现在我试图用已经存在的 mongodb 设置我们的 symfony 项目,但是在找到它时遇到了问题。

我正在尝试遵循官方指南,了解如何使用捆绑包 DoctrineMongoDBBundle 从 www.symfony.com 设置该组合。

我的教义:

doctrine_mongodb:
  auto_generate_proxy_classes: '%kernel.debug%'
  auto_generate_hydrator_classes: '%kernel.debug%'
  connections:
    default:
      server: "%mongodb_server%"
      options:
        username: "%mongodb_username%"
        password: "%mongodb_password%"
        authSource: "%mongodb_db%"
  default_database: "%mongodb_auth_db%"
  document_managers:
    default:
      auto_mapping: true
      mappings:
        App:
          is_bundle: false
          type: annotation
          dir: '%kernel.project_dir%/src/Document'
          prefix: App\Document\
          alias: App

从 services.yaml 中获取的值

parameters:
    locale: 'en'
    mongodb_server: "mongodb://mongodb:27017"
    mongodb_username: "admin"
    mongodb_password: "my_password"
    mongodb_auth_db: "admin"
    mongodb_db: "users"

我们在 docker 环境中工作,所以我的 symfony 项目和数据库在两个不同的 docker 上(我需要通过它们连接,所以 localhost 不起作用)。

作为我为用户开发控制器的第一个功能,我试图让注册用户工作,这是我当前使用的控制器(仍然带有模拟数据):

/**
 * @Route("/api/security/register", name="register")
 * @Method("GET")
 * @return JsonResponse
 */
public function registerAction(): JsonResponse
{
    $user = new User();
    $user->setUsername('test');
    $user->setEmail('test@test.test');
    $user->setPlainPassword('testtest');

    $dm = $this->get('doctrine_mongodb')->getManager();
    $dm->persist($user);
    $dm->flush();
    return new JsonResponse(array('Status' => 'OK'));
}

同样在数据库中,我想连接到有权写入“用户”数据库的管理员用户(我想在那里保存我的新用户)。

尝试发送请求时出错:

request.CRITICAL:未捕获的 PHP 异常 MongoConnectionException:“找不到合适的服务器(serverSelectionTryOnce设置):[无法解析 'mongodb']”在 /var/www/html/vendor/alcaeus/mongo-php-adapter/lib/Alcaeus/MongoDbAdapter /ExceptionConverter.php 第 79 行 {"exception":"[object] (MongoConnectionException(code: 13053): 找不到合适的服务器 ( serverSelectionTryOnceset): [Failed to resolve 'mongodb'] at /var/www/html/vendor/alcaeus /mongo-php-adapter/lib/Alcaeus/MongoDbAdapter/ExceptionConverter.php:79,MongoDB\Driver\Exception\ConnectionTimeoutException(代码:13053):找不到合适的服务器(serverSelectionTryOnce设置):[无法解析“mongodb”]在/ var/www/html/vendor/mongodb/mongodb/src/Collection.php:867)"} []

标签: mongodbsymfonyvue.jsdocker-composesymfony4

解决方案


问题确实出在我的 docker compose 文件中,我没有将两个 docker 都连接到网络,感谢@BrucieAlpha 的帮助


推荐阅读