sql >> Base de Datos >  >> RDS >> Mysql

PHP no puede resolver el nombre del contenedor mysql bajo ciertas circunstancias

Como te faltan enlaces tu contenedor de base de datos con php. Cuando vincule db con PHP, será accesible desde localhost de PHP.

Aquí está, modifiqué su archivo docker-compose como me gusta alpine en todas partes;). Y uso administrador y enlace con db para verificar la conexión en lugar de verificar el nivel de código. Como no tengo su archivo php docker, estoy creando php:alpine que 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 

Luego instalé mysqli en el contenedor php

docker exec -it php ash

y ejecute debajo del comando

docker-php-ext-install mysqli;

Luego crea test.php

aquí el nombre del servidor es db . Tenga en cuenta que el nombre de su servidor será el nombre del contenedor de base de datos que es un enlace a php. Si ping db en el contenedor php hará ping al contenedor 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";
?>

Ahora ejecute este archivo en el contenedor php. Puede montar y ejecutar su código php, pero esto es lo que hice para probar. Y lo intenté como usuario root.

php -f test.php

Y aquí está el administrador que también se vincula con db