Mysql
 sql >> Database >  >> RDS >> Mysql

PHP non può risolvere il nome del contenitore MySQL in determinate circostanze

Perché manca il collegamento il tuo contenitore db con php. Quando colleghi db con PHP, sarà accessibile da localhost di PHP.

Ecco che ho modificato il tuo file di composizione mobile perché mi piace alpine ovunque;). E uso l'amministratore e mi collego con db per verificare la connessione invece del controllo del livello di codice. Dato che non ho il tuo file docker php, sto creando php:alpine che contiene 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 

Quindi ho installato mysqli nel contenitore php

docker exec -it php ash

ed esegui sotto il comando

docker-php-ext-install mysqli;

Quindi crea test.php

qui il nome del server è db . Nota che il nome del tuo server sarà quello che è il nome del contenitore db che è collegato a php.se ping db nel contenitore php eseguirà il ping del contenitore 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";
?>

Ora esegui questo file nel contenitore php. Puoi montare ed eseguire il tuo codice php ma questo è quello che ho fatto per il test. E ho provato come utente root.

php -f test.php

Ed ecco l'amministratore che si collega anche a db