2016-12-29 2 views
2

私はSilex 2アプリケーションを構築しようとしています。ドッキング・サービス・コンテナ化をENV制御システムとして使用します。ただし、リソースにアクセスすると、PDO例外「ドライバが見つかりません」が返されます。ドッキング用の容器を介してSilex 2、Doctrine、およびPDOを正しく使用するにはどうすればよいですか?

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 

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(); 

エラーDockerfile

ドッキングウィンドウ-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 

コード

は、php.iniを確認し、mariaDBデータベース画像を使用して試み、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.iniの" [新] 1Lの内部PHP-M 、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など)のいずれかになります。

私は何かシンプルなイム見ている必要がありますが、何ですか?それを修正

答えて

3

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拡張子をphpドッカーコンテナにインストールするには、マシンに付属しているdocker-php-ext-installdocker-php-ext-configureスクリプトを使用する必要があります。

関連する問題