Я пытаюсь подключиться к mongodb из PHP 7.
У меня есть контейнер nginx, php-fpm и mongodb.
Я установил драйвер mongodb, используя pecl, и он появляется в phpinfo (), mongodb ver. 1.2.3. Дополнительно я установил mongodb / mongodb с помощью composer.
Я связал свои контейнеры с 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());
Как правильно передавать ссылки на новый mongodb в PHP? Ранее я использовал старые монго с php5, и это было нормально.
мой докер 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
Нашел решение. Проблема заключалась в том, что я поместил НЕКОТОРЫЕ из моих контейнеров в сеть, давая такой параметр, как --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
Параматер полностью из любого места, чтобы сделать его последовательным.
Надеюсь, это поможет кому-то, кто застрянет с той же проблемой.
Других решений пока нет …