php - Docker php DPO 到 MariaDB - 错误 : Could not find driver

标签 php mysql docker-compose mariadb fpm

我现在正在学习 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/

相关文章:

python - 如何在链接的 docker 容器上运行命令?

macos - 运行 docker-compose up 时 docker-compose.yml 文件错误

php - 如何在 Controller 中显示验证消息?

php - 一个有 3 个提交的表单;如何保留最终提交的数据?

php - 如何在php中获取客户端ip地址和端口?

mysql - 如何在多个表中插入数据

PHP函数有点奇怪

php - 统计MySQL表行中某类值的个数

mysql - 使用 SQL (Grails) 在输出映射中的“SUM()”

docker-compose - CommandError :/code/manage. py 已经存在,将项目或应用程序覆盖到现有目录中不会替换冲突文件