es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede conectar a la base de datos de MySQL en CakePHP en un entorno local con Docker.

Configuré un entorno local con mysql, phpmyadmin, php y mailhog y no puedo conectarme a la base de datos con CakePhp.
Mis datos de conexión en config/app.php:

“`’default’ => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => '172.21.0.4', => He probado localhost, mysql, 172.0.0.1 también…
'username' => 'root',
'password' => 'root',
'database' => 'mydb1',
'encoding' => 'utf8mb4',
'timezone' => 'UTC',
'cacheMetadata' => true,
'flags' => [],
'log' => false,

<pre><code><br />![El error que obtengo cuando voy a http://localhost/](https://i.stack.imgur.com/VYLdE.png)

Cuando pruebo la conexión a través de mysqli_connect() (directamente en config/app.php), funciona bien:

“`$link = mysqli_connect(“mysql”, “root”, “root”,’mydb1′,”3306″,”);

if (!$link) {
echo “Error: Unable to connect to MySQL.” . PHP_EOL;
echo “Debugging errno: ” . mysqli_connect_errno() . PHP_EOL;
echo “Debugging error: ” . mysqli_connect_error() . PHP_EOL;
exit;
}

echo “Success: A proper connection to MySQL was made!” . PHP_EOL;
echo “Host information: ” . mysqli_get_host_info($link) . PHP_EOL;

$query = “SELECT * FROM test”;
$result = mysqli_query($link, $query) or die(mysqli_error($link));
$flag = FALSE;

while ($row = mysqli_fetch_array($result, MYSQLI_BOTH))
{
echo $row[‘test’].”<br>”;
}

mysqli_close($link);

¡Muchas gracias!
Saludos desde Austria!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándose en el mensaje de error proporcionado en la captura de pantalla, parece que CakePhp no puede conectar al servidor MySQL utilizando los detalles de conexión proporcionados.

    Aquí hay algunos pasos que puedes realizar para solucionar este problema:

    1. Verifica que el servidor MySQL esté en ejecución y sea accesible desde tu entorno local. Puedes usar el siguiente comando para probar la conectividad:
    telnet 172.21.0.4 3306
    

    Si la conexión es exitosa, deberías ver un mensaje como el siguiente:

    Trying 172.21.0.4...
    Connected to 172.21.0.4.
    Escape character is '^]'.
    

    Si la conexión no es exitosa, es posible que desees verificar si el servidor MySQL está en ejecución o si hay alguna regla de firewall que esté bloqueando la conexión.

    1. Verifica los registros del servidor MySQL en busca de errores. Puedes encontrar los registros del servidor MySQL en el contenedor o en la máquina host, dependiendo de cómo hayas configurado tu entorno.
    2. Verifica que el nombre de la base de datos, el nombre de usuario y la contraseña sean correctos. También puedes verificar si el usuario tiene los permisos necesarios para acceder a la base de datos.

    3. Verifica si hay errores de escritura o errores de sintaxis en los detalles de conexión. Por ejemplo, en la configuración proporcionada, hay un signo igual adicional después de la dirección IP del host:

    'host' => '172.21.0.4', => También intenté localhost, mysql, 172.0.0.1...
    

    Para corregir esto, remueve el signo igual:

    'host' => '172.21.0.4',
    
    1. Intenta cambiar el valor del host a ‘localhost’ o ‘127.0.0.1’ para ver si eso ayuda.
  2. Intenta conectar a la base de datos utilizando el cliente de línea de comandos de MySQL para verificar que la base de datos esté funcionando y que puedas conectarte a ella utilizando las credenciales proporcionadas:

  3. mysql -h 172.21.0.4 -u root -p
    

    Si puedes conectarte usando este comando, es posible que el problema esté en la configuración de tu CakePhp.

    1. Si nada funciona, también puedes probar usar Docker Compose para configurar tu entorno. Docker Compose proporciona una forma fácil de crear aplicaciones con múltiples contenedores y administrar sus dependencias.

    ¡Espero que esto ayude! Avísame si tienes más preguntas o necesitas más ayuda con este problema.

Comments are closed.