如何通过docker容器正确使用Silex 2,Doctrine和PDO?

所以我正在尝试构build一个Silex 2应用程序; 使用docker服务集装箱作为ENV控制系统。 但是,访问资源时返回是一个PDOexception'驱动程序未find'。

泊坞窗,compose.yml

# program code code: build: docker/code # env_file: .env ports: - "80:8080" volumes: - ./code:/code # database db: image: mysql:latest volumes: - /var/lib/mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: app_db MYSQL_USER: app_db_user MYSQL_PASSWORD: app_db_pass 

代码Dockerfile

 FROM php:7 WORKDIR /code # install curl and php RUN apt-get update -y RUN apt-get install git zip -y # install composer & app deps; then remove RUN curl -sS https://getcomposer.org/installer | php RUN mv composer.phar /usr/local/bin/composer EXPOSE 80 CMD ["php", "-S", "0.0.0.0:80"] 

服务器逻辑

 <?php # silex micro framework basic entry script // web/index.php require_once __DIR__.'/vendor/autoload.php'; require_once __DIR__.'/common/env.php'; $app = new Silex\Application(); $app['debug'] = true; $app->register(new Silex\Provider\DoctrineServiceProvider(), [ 'db.options' => [ 'driver' => 'pdo_mysql', 'dbname' => 'app_db', 'host' => '172.17.0.2', 'user' => 'app_db_user', 'password' => 'app_db_pass', 'charset' => 'utf8mb4', 'port' => '3306', ] ]); $app->get('/', function () use ($app) { $sql = 'SELECT * FROM test WHERE id = 1'; $data = $app['db']->fetchAssoc($sql); return json_encode($data); }); $app->run(); 

错误:

 Whoops, looks like something went wrong. 3/3 DriverException in AbstractMySQLDriver.php line 115: An exception occured in driver: could not find driver 2/3 PDOException in PDOConnection.php line 47: could not find driver 1/3 PDOException in PDOConnection.php line 43: could not find driver 

尝试使用mariaDB数据库图像,检查php.ini和mysqlnd PDO驱动程序安装:

 mysqlnd mysqlnd enabled Version mysqlnd 5.0.12-dev - 20150407 - $Id: d8daadaf41e3cd81d7c6ae96c6091fd15b2c9382 $ Compression supported core SSL supported extended SSL supported Command buffer size 4096 Read buffer size 32768 Read timeout 31536000 Collecting statistics Yes Collecting memory statistics No Tracing n/a Loaded plugins mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password API Extensions no value 

_server_容器里面的php- m〜
“php.ini”[新]写1L,23C

php -m

 [PHP Modules] Core ctype curl date dom fileinfo filter ftp hash iconv json libxml mbstring mysqlnd openssl pcre PDO pdo_sqlite Phar posix readline Reflection session SimpleXML SPL sqlite3 standard tokenizer xml xmlreader xmlwriter zlib 

作为一个侧面说明,我想保持server服务尽可能抽象,因为服务器可能是任何数量的选项(内置,Apache,Nginx等)之一。

我必须做一些简单的事情,但是什么?

修复:

 FROM php:latest # install curl and php RUN apt-get update -y RUN apt-get install curl git zip -y # call PHP images script `docker-php-ext-install` and install language extensions RUN docker-php-ext-install pdo pdo_mysql # install composer & app deps; then remove RUN curl -sS https://getcomposer.org/installer | php RUN mv composer.phar /usr/local/bin/composer # change working dir WORKDIR /code CMD ["php", "-S", "0.0.0.0:80"] 

注意RUN docker-php-ext-install pdo pdo_mysql 。 显然,在php docker容器中安装php扩展需要使用随本机提供的内置的docker-php-ext-installdocker-php-ext-configure脚本。

Interesting Posts