【问题标题】:ConnectionTimeoutException: No suitable servers found while inserting data into mongodb databaseConnectionTimeoutException:将数据插入 mongodb 数据库时未找到合适的服务器
【发布时间】:2020-03-06 00:08:27
【问题描述】:

我是 Docker 和 Mongodb 的新手。 我的 docker-compose.yml 文件中有以下内容。

version: '3.3'
services:
    web:
      build:
        context: ./
        dockerfile: Dockerfile
      container_name: php73
      volumes:
        - ./src:/var/www/html/
      ports:
        - 8000:80
      depends_on:
        - db
      networks:
        - my-network
    db:
      image: mongo:latest
      container_name: mymongo
      restart: always
      ports:
        - '27017-27019:27017-27019'
      networks:
        - my-network
networks:
  my-network:

以下文件在 php 容器中运行。它只是创建一个数据库并将一些集合插入到数据库中。

<?php
require 'vendor/autoload.php';

$myClient = new MongoDB\Client('mongodb://127.0.0.1:27017');

$mydb = $myClient->my_db;
$mycollection = $mydb->my_collection;

$insertData = $mycollection->insertOne([
                'doc1' => 'abc', 
                'doc2' => 'def'
                ]);
?>

但是,它显示以下错误:

PHP Fatal error:  Uncaught MongoDB\\Driver\\Exception\\ConnectionTimeoutException: No suitable servers found (`serverSelectionTryOnce` set): [connection refused calling ismaster on '127.0.0.1:27017'] in /var/www/html/vendor/mongodb/mongodb/src/functions.php:431\nStack trace:\n#0 /var/www/html/vendor/mongodb/mongodb/src/functions.php(431): MongoDB\\Driver\\Manager->selectServer(Object(MongoDB\\Driver\\ReadPreference))\n#1 /var/www/html/vendor/mongodb/mongodb/src/Collection.php(929): MongoDB\\select_server(Object(MongoDB\\Driver\\Manager), Array)\n#2 /var/www/html/mycode.php(16): MongoDB\\Collection->insertOne(Array)\n#3 {main}\n  thrown in /var/www/html/vendor/mongodb/mongodb/src/functions.php on line 431, referer: http://localhost:8000/index.php

我无法弄清楚为什么它显示 ConnectionTimeoutException。 谁能给点提示?

【问题讨论】:

    标签: mongodb docker php-7


    【解决方案1】:

    将您的连接字符串更新为

    <?php
    require 'vendor/autoload.php';
    
    $myClient = new MongoDB\Client('mongodb://db:27017');
    // or new MongoDB\Client('mongodb://db:27017');
    $mydb = $myClient->my_db;
    $mycollection = $mydb->my_collection;
    
    $insertData = $mycollection->insertOne([
                    'firstname' => 'abc', 
                    'lastname' => 'def'
                    ]);
    ?>
    

    docker-compose 默认创建网络,可以通过容器名访问其他容器,其中127.0.0.1指的是php容器的localhost,不是DB容器。

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2021-07-17
      • 2017-05-29
      • 2015-06-15
      • 1970-01-01
      相关资源
      最近更新 更多