2017-02-10 74 views
1

我有一個容器內的項目,我試圖使用gd lib進行圖像創建。libgd未安裝在php:5.6-cli docker

我做容器的bash的內部命令:重啓後

apt-get install php5-gd 

沒有發生任何變化,並執行php -m

我該怎麼辦?

編輯:

我加入到我的Dockerfile:

RUN apt-get -qq update && apt-get -qq install libpng-dev 
RUN docker-php-ext-install gd 

我執行搬運工人建立-t [名]

但是,當我執行bash和類型:php -m

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

「執行bash」是什麼意思?你能否確切地說明你在哪裏以及如何運行'php -m'? – k0pernikus

+0

@ k0pernikus'sudo碼頭exec -ti名稱bash'裏面我使用'php -m' – Coluh

+0

我假設你不運行新創建的圖像,而是一個過時的容器。我已經更新了我的答案,以查看圖像是否具有適當的模塊。 – k0pernikus

回答

3

請勿手動安裝gd。那就是docker-php-ext-install

的dockerfile中,添加:

RUN docker-php-ext-install gd 

有一個有點討厭跟你要搞清楚手動哪些依賴你需要docker-php-ext-install。他們不會自動解決。由於這個原因,該命令將自行崩潰,與:

configure: error: png.h not found. 

如果你去查找錯誤,你會發現你需要libpng-dev

因此最後,整個Dockerfile應該是這個樣子:

FROM php:5.6-cli 
RUN apt-get -qq update && apt-get -qq install libpng-dev 
RUN docker-php-ext-install gd > /dev/null 

泊塢窗-PHP-EXT安裝在其輸出有點冗長,因此我喜歡管其輸出/dev/null。錯誤和警告仍將被打印。

您可以檢查圖像具有通過運行圖像適當延長:

docker build -t php-gd . 
docker run php-gd /bin/bash -c "php -m | grep gd" 

會打印:

:碼頭工人,撰寫堆內

gd 

docker-compose.yml

gd-example: 
    build: . 
    tty: true 

docker-compose up --build -d 
docker ps // to find container's name. You may also set in the config 
docker exec -it docker_gd-example_1 php -m | grep gd  

二圖片的標題說明:

  1. 從你的問題,如果你建立你的容器中,然後運行從中apt-get install php5-gd是不明確。如果是這樣,那麼只能在該容器中安裝php5-gd,並且每次重新創建它時,它都將消失。始終將內容添加到Dockerfile內的容器中。

  2. php:7.1-cli一試。你真的需要支持PHP 5.6嗎? ;)

+0

這是正確的答案。 – programmerq

+0

當我執行你的命令時打印gd。但是當我做docker-compose -p name重新啓動我的所有容器時,當我進入一個,然後輸入'php -m | grep gd'沒有什麼:/ – Coluh

+0

@devtreat你是否通過'docker-compose build'重建了容器? – k0pernikus