Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP nie może rozwiązać nazwy kontenera mysql w pewnych okolicznościach

Ponieważ brakuje Ci powiązania masz kontener db z php. Kiedy połączysz db z PHP, będzie on dostępny z lokalnego hosta PHP.

Oto zmodyfikowałem twój plik docker-compose, ponieważ wszędzie lubię alpejskie;). Używam administratora i linku z db do weryfikacji połączenia zamiast sprawdzania poziomu kodu. Ponieważ nie mam pliku docker php, więc tworzę php:alpine, który zawiera php7.

Wersja
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 

Następnie zainstalowałem mysqli w kontenerze php

docker exec -it php ash

i uruchom poniżej polecenie

docker-php-ext-install mysqli;

Następnie utwórz test.php

tutaj nazwa serwera to db . Zauważ, że nazwa twojego serwera będzie taka, jak nazwa kontenera bazy danych, która jest linkiem do php.jeśli ping db w kontenerze php będzie pingować kontener 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";
?>

Teraz uruchom ten plik w kontenerze php. Możesz zamontować i uruchomić swój kod php, ale to właśnie zrobiłem do testowania. I próbowałem jako użytkownik root.

php -f test.php

A oto administrator, który również łączy się z db



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Doctrine nie utrwala encji z wartościami boolowskimi i PDO::ATTR_EMULATE_PREPARES =false w Mysql

  2. Usuń zduplikowane słowa z pola w mysql

  3. Historia zapytań MySql workbench (ostatnie wykonane zapytanie / zapytania) tj. tworzenie / zmiana tabeli, wybieranie, wstawianie zapytań aktualizujących

  4. Jak określić, co jest bardziej skuteczne:RÓŻNE czy GDZIE ISTNIEJE?

  5. Instrukcja przypadku w MySQL