2016-12-03 138 views
2

我有一个Dockerfile:泊坞窗 - 安装PDO驱动程序PHP + Nginx的

FROM php:7-fpm 

RUN apt-get update \ 
    && apt-get install -y --no-install-recommends libpq-dev \ 
    && docker-php-ext-install mysqli pdo_pgsql pdo_mysql 

然后,我有我的搬运工,compose.yml文件:

web: 
    image: nginx:latest 
    ports: 
    - "80:80" 
    volumes: 
    - ./frontend:/var/www/html 
    - ./api:/var/www/html/api 
    - ./nginx/default.conf:/etc/nginx/conf.d/default.conf 
    links: 
    - php 
mysql: 
    image: mariadb 
    ports: 
    - "3306:3306" 
    environment: 
    - MYSQL_ROOT_PASSWORD=password 
    - MYSQL_DATABASE=example 
    volumes: 
    - ./database:/var/lib/mysql 
php: 
    image: php:7-fpm 
    volumes: 
    - ./frontend:/var/www/html 
    - ./api:/var/www/html/api 
    links: 
    - mysql 

然后在我的PHP代码我有:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "password"; 

try { 
     $conn = new PDO("mysql:host=$servername;dbname=example", $username, $password); 
     // set the PDO error mode to exception 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     echo "Connected successfully"; 
     } 
    catch(PDOException $e) 
     { 
     echo "Connection failed: " . $e->getMessage(); 
     } 
    ?> 

,当我去连接到我的数据库,我得到:

连接失败:找不到驱动程序

我怎么会下载使用该泊坞窗设置的PDO驱动程序?

+0

它实际上是否试图通过代码连接到本地主机?如果是这样,我没有看到任何容器连接到主机网络。只是想在我猜测之前澄清。代码是否应该在PHP FPM中执行? – Dockstar

+0

我有从Web图像链接的PHP。 现在我可以去本地主机,它提供的PHP页面很好,但试图使用PDO连接到我的数据库将无法正常工作,因为缺少驱动程序。 – ClickThisNick

回答

1

有两个问题:

1)的Dockerfile应该是这样的安装PDO驱动程序:

RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev libpq-dev \ 
&& rm -rf /var/lib/apt/lists/* \ 
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \ 
&& docker-php-ext-install gd mbstring pdo pdo_mysql pdo_pgsql 

2)从PHP连接到MySQL,你需要使用的名字从dockerfile(mysql)不是本地主机,像这样:

$conn = new PDO("mysql:host=mysql;dbname=example", root, password);