我现在正在学习PDO,发现在Ubuntu 18.04LTS上的LEMP docker堆栈(Nginx,php-fpm,MariaDB,phpMyadmin)中学习PDO更好。

这是我的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)上收到该消息时: Error : could not find driver

我在这里看到该帖子: “ Docker无法使用PHP连接到mariadb” 这个问题和我的非常相似,但是对我来说不起作用。

注意: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的情况下解决此问题,那就太好了。 但是,如果必须的话,我会的。 这不是问题。

===============>>#1 票数:0

docker-compose是Dockerfile的一种“ api”。 您需要在Dockerfile中添加这些库(apt-get等)。

Dockerfile是您的朋友!

  ask by Bravo2bad translate from so

===============>>#2 票数:0

您的PHP文件是在主机容器中还是 Docker容器外部运行?

如果是泊坞窗容器运行,其服务是哪个? 请注意, nginx服务没有“链接”配置,这意味着它仅通过“数据库”主机名访问数据库。 还要检查端口 (在本文末尾)。

如果您的PHP文件在外部运行,则必须在连接字符串中使用localhost而不是mysql,例如: 'mysql:host=localhost;dbname=mysql;charset=utf8' 这是因为docker的内部DNS就是:内部。 您无法在Docker外部访问此主机名(数据库或mysql)。

同样重要的是,您的连接字符串未指定端口,在您的情况下为7052。 由于您是从7052重定向到3306,因此我认为3306是mysql的默认端口,如果未指定,驱动程序会假定3306。 明确说明主机和端口始终是一个好主意。 检查有关它的PHP数据库连接字符串的文档(因为我对php一无所知)。 可能是...;port=7052东西。

另外,请阅读正在使用的docker-compose links 现在已弃用,因此我建议不要在以后的项目中使用它,甚至建议花一些时间删除它。 如果一切顺利,应该花费30秒到5分钟的时间,它不会再困扰您了。

  ask by Bravo2bad translate from so

本文未有回复,本站智能推荐: