我现在正在学习 PDO,我发现在 Ubuntu 18.04LTS 上的 LEMP docker 堆栈(Nginx、php-fpm、MariaDB、phpMyadmin)中学习它更好。
这是我的 php 文件:
<?php
try {
$mydb = new PDO('mysql:host=database;dbname=mysql;charset=utf8', 'root', 'admin');
} catch (Exception $e) {
die('Error : ' . $e->getMessage());
}
?>
正如你所看到的,我尝试在我的 php 代码中创建一个 PDO 以从我的数据库中恢复一些数据。
但每次我在浏览器(Firefox 69.0.2)上收到该消息时:
错误:找不到驱动程序
我在这里看到了那个帖子:"Docker can't connect to mariadb with PHP" 。这个问题与我的非常相似,但它对我不起作用。
注意:php-fmp 和 Nginx 可以完美配合。 MariaDB 和 phpMyAdmin 也是如此。
这是我的 docker-compose.yml
文件:
version: "3"
services:
nginx:
image: tutum/nginx
ports:
- "7050:80"
links:
- phpfpm
volumes:
- ./nginx/default:/etc/nginx/sites-available/default
- ./nginx/default:/etc/nginx/sites-enabled/default
- ./logs/nginx-error.log:/var/log/nginx/error.log
- ./logs/nginx-access.log:/var/log/nginx/access.log
phpfpm:
image: php:fpm
links:
- database:mysql
ports:
- "7051:9000"
volumes:
- ./public:/usr/share/nginx/html
database:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: admin
ports:
- "7052:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
links:
- database:mysql
ports:
- "7053:80"
environment:
PMA_HOST: mysql
PMA_USER: root
PMA_PASSWORD: admin
PMA_ARBITRARY: 1
如果能够在不构建我自己的 Dockerfile 的情况下解决这个问题,那就太好了。 但如果我必须的话,我会的。这不是问题。
最佳答案
A找到了解决方案。
首先主机必须是mysql
而不是我的容器的名称(即 database
):
$mydb = new PDO('mysql:host=mysql;dbname=mysql;charset=utf8', 'root', 'admin');
在 phpfpm 容器内(可通过命令 docker-compose run --rm <container-name> bash
访问),我必须启用 extension=php_pdo_msql
我的配置文件 php.ini
中的行删除行首的分号。
为了避免每次 docker-compose up
之后手动执行此操作,我替换了我的docker-compose.yml
中的phpfpm服务文件如下Dockerfile
:
FROM php:fpm
RUN docker-php-ext-install pdo pdo_mysql
最后,只需使用命令 docker-compose build .
构建镜像即可(将 .
替换为包含 docker-compose.yml
文件的目录路径)。
它非常适合我。
关于php - Docker php DPO 到 MariaDB - 错误 : Could not find driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58467805/