Je suis nouveau à Docker et j'ai essayé de comprendre comment je peux me connecter à mon conteneur MariaDB avec PHP sans succès.Docker ne peut pas se connecter à mariadb avec PHP
J'ai essayé de chercher sur stackoverflow et google mais je n'ai trouvé aucune information utile, alors j'espère que vous pourriez m'aider. La chose étrange est que lorsque j'essaie de me connecter à MariaDB avec JetBrains DataGrip avec localhost, mysql, root, admin, je peux me connecter à la base de données mais pas avec PDO.
J'espère vraiment que vous pourriez m'aider, merci pour votre temps.
Voici les fichiers de projet suivants:
Ceci est mon fichier docker-compose.yml
version: "3.1"
services:
nginx:
image: nginx:alpine
container_name: nginx
volumes:
- ./config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
links:
- php
php:
image: php:7.1-fpm
container_name: php
links:
- mariadb:mysql
volumes:
- ./public:/public
ports:
- "9000:9000"
mariadb:
image: mariadb:10.1
container_name: database
environment:
MYSQL_ROOT_PASSWORD: admin
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
links:
- mariadb
ports:
- 8183:80
environment:
PMA_HOST: mariadb
PMA_USER: root
PMA_PASSWORD: admin
PMA_ARBITRARY: 1
Mon fichier nginx.conf:
server {
listen 80 default;
client_max_body_size 108M;
access_log /var/log/nginx/application.access.log;
root /public;
index index.php;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
}
Et mon fichier index.php
<?php
$servername = "localhost";
$username = "root";
$password = "admin";
$database = "mysql";
try {
$conn = new PDO("sqlite:host=".$servername.";dbname=" . $database, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = $conn->prepare("SELECT * FROM testDB");
$sql->execute();
while($result = $sql->fetch(PDO::FETCH_ASSOC)){
$result['myTestData'];
}
}
catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
Peut-être que vous devriez changer 'sqlite' à' mysql' dans votre DSN – Bart
J'ai essayé cela, je reçois le message du conducteur non trouvé. – user3626278
Vous devez donc installer/activer le pilote pdo mysql – Bart