Comme il vous manque un lien votre conteneur db avec php. Lorsque vous liez db avec PHP, il sera accessible à partir de l'hôte local de PHP.
Voilà j'ai modifié votre fichier docker-compose comme j'aime alpine partout;). Et j'utilise adminer et lien avec db pour vérifier la connexion au lieu de vérifier le niveau de code. Comme je n'ai pas votre fichier docker php, je crée donc php:alpine qui contient php7.
version: "3"
services:
nginx:
image: nginx:1.13-alpine
container_name: nginx
ports:
- "8081:80"
command: nginx -g "daemon off;"
db:
image: mysql:5.5
environment:
MYSQL_ROOT_PASSWORD: example
php:
image: php:alpine
container_name: php
tty: true
links:
- db
adminer:
image: adminer
container_name: adminer
ports:
- 8080:8080
links:
- db
Ensuite, j'ai installé mysqli dans le conteneur php
docker exec -it php ash
et exécutez la commande ci-dessous
docker-php-ext-install mysqli;
Créez ensuite test.php
ici le nom du serveur est db . Notez que le nom de votre serveur sera le nom du conteneur db qui est lié à php.if vous ping db
dans le conteneur php, il cinglera le conteneur db.
<?php
$servername = "db";
$username = "root";
$password = "example";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
Exécutez maintenant ce fichier dans le conteneur php. Vous pouvez monter et exécuter votre code php mais c'est ce que j'ai fait pour les tests. Et j'ai essayé en tant qu'utilisateur root.
php -f test.php
Et voici adminer qui fait aussi le lien avec db