2017-01-29 3 views
0

ich von PHP zu verbinden bin versucht zu MongoDB 7.Docker php mongodb Weitergabe Links MongoDB Verbindung

Ich habe nginx Container, php-fpm Behälter und mongodb Behälter.

Ich installierte Mongodb-Treiber mit Pecl und es wird in phpinfo() angezeigt, Mongodb ver. 1.2.3. Zusätzlich habe ich mongodb/mongodb mit Composer installiert.

verknüpft ich meine Container MongoDB (zB --link mongodb_container:mongodb)

Jetzt, als ich zu bin versucht:

$collection = (new Client('mongodb'))->streamflixmongodb->videos; 

würde ich einen Fehler:

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 

Da Verbindungen mit beginnen sollte mongodb: //

Zusätzlich, wenn ich versuche:

$collection = (new Client('mongodb://mongodb:27015'))->streamflixmongodb->videos; 

ich die folgende Fehlermeldung erhalten:

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 

Die Fehler erzeugt werden, wenn ich laufen:

var_dump($collection->find()); 

Was ist der richtige Weg Links zu neuen mongodb in PHP zu übergeben? Vorher benutzte ich älteren Mongo mit php5 und es war in Ordnung.

mein Docker 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 
+2

dein 'docker ps -a' sagt dein mongodb container ist' mongodb_streamflix' nicht 'mongodb', Also verbinde deinen container mit mongodb mit ...' --link mongodb_streamflix: mongodb_streamflix'. Und in deinem Container verbinde dich mit mongodb mit '$ collection = (neuer Klient ('mongodb: // mongodb_streamflix: 27015')) -> streamflixmon godb-> videos;' und lass mich wissen, was passiert. –

+0

Hallo, Entschuldigung, dass ich das nicht am Firstplace geklärt habe. Diese Verbindung war nur ein Beispiel. Mein Mongodb ist verlinkt mit --link mongodb_streamflix: mongodb –

Antwort

0

eine Lösung gefunden. Das Problem war, dass ich einige meiner Container auf dem Netz setzen, einen Parameter wie --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 

geben kann ich nicht glauben, dass ich die meiste Zeit des Tages verbrachte da könnte nicht vor Ort dies: D

Offensichtlich, wenn Ich habe Netzwerk für einige Container erstellt, ich musste sie alle darauf setzen, oder entfernen --network paraMater vollständig von überall, um es konsistent zu machen.

Hoffe das hilft jemandem, der mit dem gleichen Problem stecken bleibt.