2017-02-10 73 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