【问题标题】:docker php mongodb passing links to mongodb connectiondocker php mongodb 将链接传递给 mongodb 连接
【发布时间】: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'))->streamflixmon‌​godb->videos; 连接到 mongodb 并让我知道会发生什么。
  • 嗨,很抱歉我没有在第一站解决这个问题。该链接只是一个示例。我的 mongodb 使用 --link mongodb_streamflix:mongodb 链接

标签: php mongodb docker php-7


【解决方案1】:

找到了解决办法。问题是我把我的一些容器放到了网络上,给出了一个参数,比如--network app-tier

docker run -d --name streamflix-php-fpm --network app-tier -v 
/Volumes/Data/MSc\ Stuff/DEVOPS/streamflix-docker/php-fpm:/bitnami/php-fpm
-v /Volumes/Data/MSc\ Stuff/DEVOPS/streamflix-docker/streamflix:/var/www/html
--link streamflix-mysql-server:mysqldb 
--link mongodb_streamflix:mongodb 
--link videoserv:videoserver   vignatjevs/php-fpm

我不敢相信我花了一天的大部分时间,因为无法发现这一点:D

显然,如果我为某些容器创建了网络,我必须将它们全部放在上面,或者从任何地方完全删除 --network 参数以使其保持一致。

希望这可以帮助遇到同样问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2016-06-13
    • 2022-01-14
    • 2019-02-16
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多