Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP ne peut pas résoudre le nom du conteneur mysql dans certaines circonstances

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