2016-12-03 8 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

У меня есть 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.) Для того, чтобы подключиться к MySQL из PHP вы должны использовать название dockerfile (mysql) не localhost, например:

$conn = new PDO("mysql:host=mysql;dbname=example", root, password); 
Смежные вопросы