2016-12-03 140 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);