2017-02-10 32 views
0

我正在使用「php:7.1」docker鏡像來設置新項目的測試環境。嘗試使用MySQL函數在「php:7.1」docker鏡像中不可用

$db = new mysqli(...); 

函數獲取數據庫連接時出錯。

我試圖用泊塢窗圖像在交互模式下手動查找所需的設置步驟:

docker run -i -t php:7.1 /bin/bash 

我運行下面的步驟我在網上找到準備「mysqli的」功能:

# update image 
apt-get update 
# install vim for local editing 
apt-get install vim 

我試圖從以下後安裝mysql:How to enable MySQLi extension in php 7?

apt-get install php-mysql 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
E: Unable to locate package php-mysql 

我想只有激活擴展,但不工作,因爲extenstion不存在:

extension=php_mysqli.dll 

錯誤:

php info.php |grep mysql 
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20160303/php_mysqli.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20160303/php_mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0 
Configure Command => './configure' '--with-config-file-path=/usr/local/etc/php' '--with-config-file-scan-dir=/usr/local/etc/php/conf.d' '--disable-cgi' '--enable-ftp' '--enable-mbstring' '--enable-mysqlnd' '--with-curl' '--with-libedit' '--with-openssl' '--with-zlib' 
mysqlnd 
mysqlnd => enabled 
Version => mysqlnd 5.0.12-dev - 20150407 - $Id: b396954eeb2d1d9ed7902b8bae237b287f21ad9e $ 
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password 
mysqlnd statistics => 

我沒有一個想法是什麼我可以做的就是安裝的擴展和啓用。

+0

嘗試使用https://phpdocker.io/構建搬運工文件 - - 它有一個生成器,可以讓你勾選你想要的功能,並在最後得到一個工作的docker文件。真的很容易,避免了很多麻煩。 – Simba

+0

DLL是一個窗口的東西。對於你需要的linux –

+0

我用.so作爲擴展名。這是來自網站的複製/粘貼。 – Konrad

回答

1

那是因爲你做錯了。第一件事是MySQL擴展,舊的,在PHP 7 +中被棄用。它在基於Debian的發行版中也不存在。所以,你需要做的是創建一個包含以下內容的Dockerfile

FROM php:7.1 
RUN docker-php-ext-install mysqli && \ 
    docker-php-ext-install pdo_mysql 

並運行命令假設你的目錄是在Dockerfile生活:

docker build -t <some_tag> . 
docker run -it <some_tag> bash 

您將獲得進入你的容器的提示,你可以運行,那麼php -v輸出應該是這樣的:

# php -m 
[PHP Modules] 
... 
mysqli ===> MySQLi has been installed 
mysqlnd ===> MySQLnd has been installed 
...