Ne peut pas se connecter à MySQL docker conteneur créé via docker-composer
Je veux commencer avec docker et créé un simple conteneur de l'environnement avec une nginx conteneur, un PHP-FPM conteneur et une base de données MySQL contenant.
Alors que le lien entre la nginx et PHP-FPM conteneur fonctionne bien je n'arrive pas à lier le serveur d'application PHP avec le serveur de base de données.
- Je utiliser docker-composer afin de minimiser le manuel du terminal travail. Mon menu fixe-composer.yml ressemble à ceci:
web:
image: tutorial/nginx
ports:
- "8080:80"
volumes:
- ./src:/var/www
- ./src/vhost.conf:/etc/nginx/sites-enabled/vhost.conf
links:
- php
php:
image: nmcteam/php56
volumes:
- ./src/php-fpm.conf:/etc/php5/fpm/php-fpm.conf
- ./src:/var/www
links:
- db
db:
image: sameersbn/mysql
volumes:
- /var/lib/mysql
environment:
- DB_NAME=demoDb
- DB_USER=demoUser
- DB_PASS=demoPass
Alors que j'essaie de me connecter à la bd avec la déclaration suivante:
$db = new \PDO('mysql:host=db;dbname=demoName', 'demoUser', 'demoPass');
La base de données MySQL contenant lui-même est de travail que je peux me connecter à l'conteneurs bash et utiliser le MySQL de la CLI:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| demoDb |
| mysql |
| performance_schema |
+--------------------+
Je viens d'obtenir une erreur 500 et ne peuvent pas trouver une raison pourquoi cela ne marcherait pas. Toute aide ou suggestion de ce que je pourrais avoir manqué est plus apprécié.
$db = new \PDO('mysql:host=localhost;dbname=demoName', 'demoUser', 'demoPass');
si la connexion locale sinon, vous devez exposer le port et l'utilisation de l'ip de la machine hôte. Relier les expose liés conteneur interne à l'application, il est lié. Vous ne pouvez pas faire référence en db, vous devez le référencer par localhost
ou 127.0.0.1
merci pour l'effort. J'ai fait des observations sur la réponse que vous avez fournie.
êtes-vous de la connexion de la boîte de nginx?
Je ne suis pas sûr si je reçois votre question... Comme le serveur d'application PHP interprète tout mon code PHP il doit se connecter par le biais de ce conteneur. S'il vous plaît corrigez-moi si je me trompe ici.
Essayez ceci:
$db = new \PDO('mysql:host=db;port=3306;dbname=demoDb', 'demoUser', 'demoPass');
Vous avez DB_NAME=demoDb
mais sont la mise en 'mysql:host=db;dbname=demoName'
. Changement qui, rebranchez-le et voyez si cela fonctionne. Je ne pense pas que c'est un Docker de la question, mais un code de problème.OriginalL'auteur Mr.Moe | 2016-05-26
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas un Débardeur de la question, mais un code de problème:
Vous avez:
$db = new \PDO('mysql:host=db;dbname=demoName', 'demoUser', 'demoPass');
Il devrait être:
$db = new \PDO('mysql:host=db;port=3306;dbname=demoDb', 'demoUser', 'demoPass');
OriginalL'auteur GHETTO.CHiLD
Si vous avez
0.0.0.0
d'accueil de votre conteneur avec MySql et vous voulez vous connecter à la base de données de l'extérieur de docker (WorkBench ou SequelPro), il suffit d'utiliser votre menu fixe-IP de l'appareil. Exemple:Alors que votre hôte MySQL est
192.168.99.100
à bon port par exemple3306
OriginalL'auteur R Picheta
Vous utilisez
sameersbn/mysql
comme image de base pour MySQL qui exposeEXPOSE 3306/tcp
selon cette dockerfile.Je pense que vous avez besoin d'exposer le port 3306 pour 3306 dans le conteneur. vous pouvez le faire en ajoutant les lignes suivantes à votre
docker-compose.yml
fichier:Personnellement, je voudrais utiliser l'original MySQL image à la place de celui que vous utilisez.
Cependant, comme une solution complète de ce que vous essayez d'atteindre
(Nginx, PHP-FPM and MySQL)
envisager d'utiliser LaraDock ce projet open source est conçu pour Laravel, mais vous pouvez facilement le modifier pour le faire fonctionner avec votre code PHP.OriginalL'auteur Mahmoud Zalt