【发布时间】:2017-06-14 11:55:32
【问题描述】:
我正在尝试从 PHP 7 连接到 mongodb。
我有 nginx 容器、php-fpm 容器和 mongodb 容器。
我使用 pecl 安装了 mongodb 驱动程序,它显示在 phpinfo(),mongodb 版本中。 1.2.3。另外,我使用 composer 安装了 mongodb/mongodb。
我将容器链接到 mongodb(例如 --link mongodb_container:mongodb)
现在当我尝试:
$collection = (new Client('mongodb'))->streamflixmongodb->videos;
我会得到一个错误:
Fatal error: Uncaught MongoDB\Driver\Exception\InvalidArgumentException:
Failed to parse MongoDB URI: 'mongodb' in /vendor/mongodb/mongodb/src/Client.php:81 Stack trace:
#0 /vendor/mongodb/mongodb/src/Client.php(81): MongoDB\Driver\Manager->__construct('mongodb', Array, Array)
#1 /var/www/html/test.php(24): MongoDB\Client->__construct('mongodb')
#2 {main} thrown in /vendor/mongodb/mongodb/src/Client.php on line 81
因为连接应该以 mongodb://
另外,如果我尝试:
$collection = (new Client('mongodb://mongodb:27015'))->streamflixmongodb->videos;
我会得到以下错误:
Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionTimeoutException:
No suitable servers found (`serverSelectionTryOnce` set):
[connection timeout calling ismaster on 'mongodb:27015'] in
/vendor/mongodb/mongodb/src/Collection.php:513 Stack trace: #0
/vendor/mongodb/mongodb/src/Collection.php(513):
MongoDB\Driver\Manager->selectServer(Object(MongoDB\Driver\ReadPreference))
#1 /var/www/html/test.php(27): MongoDB\Collection->find('.mp4')
#2 {main} thrown in /vendor/mongodb/mongodb/src/Collection.php on line 513
我运行时产生的错误:
var_dump($collection->find());
在 PHP 中将链接传递到新的 mongodb 的正确方法是什么?以前我在 php5 中使用过旧的 mongo,这很好。
我的码头工人 ps -a
93ce6947f2d8 vignatjevs/nginx "/bin/sh -c 'servi..." 2 days ago Up 57 seconds 0.0.0.0:8082->80/tcp, 0.0.0.0:32814->443/tcp streamflix
569307612b50 vignatjevs/php-fpm "/app-entrypoint.s..." 2 days ago Up 2 minutes 9000/tcp streamflix-php-fpm
03decea6dfa7 composer "/docker-entrypoin..." 2 days ago Exited (0) 2 minutes ago composer
c01b48fcdda3 jenkins "/bin/tini -- /usr..." 3 days ago Up 21 hours 50000/tcp, 0.0.0.0:49001->8080/tcp clever_swartz
d16ace0397be tutum/mongodb "mongod --smallfiles" 6 days ago Up 21 hours 0.0.0.0:27017->27017/tcp, 0.0.0.0:28017->28017/tcp mongodb_streamflix
72e7bca2e2b7 phpmyadmin/phpmyadmin "/run.sh phpmyadmin" 12 days ago Up 21 hours 0.0.0.0:8080->80/tcp streamflix_admin
a0988be5018a centurylink/mysql "/usr/local/bin/run" 12 days ago Up 21 hours 0.0.0.0:3306->3306/tcp, 0.0.0.0:6603->3306/tcp streamflix-mysql-server
【问题讨论】:
-
您的
docker ps -a表示您的 mongodb 容器是mongodb_streamflix而不是mongodb,因此,使用 ...--link mongodb_streamflix:mongodb_streamflix将您的容器链接到 mongodb。在您的容器内,使用$collection = (new Client('mongodb://mongodb_streamflix:27015'))->streamflixmongodb->videos;连接到 mongodb 并让我知道会发生什么。 -
嗨,很抱歉我没有在第一站解决这个问题。该链接只是一个示例。我的 mongodb 使用 --link mongodb_streamflix:mongodb 链接