Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unter bestimmten Umständen kann PHP den mysql-Containernamen nicht auflösen

Da fehlt Ihnen die Verlinkung Sie DB-Container mit php. Wenn Sie db mit PHP verknüpfen, wird es von localhost von PHP aus zugänglich sein.

Hier habe ich Ihre Docker-Compose-Datei modifiziert, da ich Alpine überall mag;). Und ich verwende adminer und link with db, um die Verbindung zu überprüfen, anstatt die Codeebene zu überprüfen. Da ich Ihre PHP-Docker-Datei nicht habe, erstelle ich php:alpine, die php7 enthält.

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 

Dann habe ich mysqli im PHP-Container installiert

docker exec -it php ash

und führen Sie den folgenden Befehl

aus
docker-php-ext-install mysqli;

Erstellen Sie dann test.php

hier ist der Servername db . Beachten Sie, dass Ihr Servername der Name des DB-Containers ist, der ein Link zu php ist. Wenn Sie ping db ausführen im PHP-Container wird der DB-Container gepingt.

    <?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";
?>

Führen Sie diese Datei nun im PHP-Container aus. Sie können Ihren PHP-Code mounten und ausführen, aber das habe ich zum Testen getan. Und ich habe es als Root-Benutzer versucht.

php -f test.php

Und hier ist der Administrator, der auch mit db verknüpft ist