php:5.6-cli docker 中未安装 libgd

hdr*_*ven 1 php gd php-extension docker dockerfile

我在容器中有一个项目,我尝试使用 gd lib 进行图像创建。

我在容器的 bash 中执行此命令:

apt-get install php5-gd
Run Code Online (Sandbox Code Playgroud)

重启并执行后没有任何变化 php -m

我该怎么办?

编辑:

我添加到我的 Dockerfile:

RUN apt-get -qq update && apt-get -qq install libpng-dev
RUN docker-php-ext-install gd
Run Code Online (Sandbox Code Playgroud)

我执行 docker build -t [name]

但是当我执行 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
Run Code Online (Sandbox Code Playgroud)

k0p*_*kus 5

不要手动安装 gd。有docker-php-ext-install这个。

在 dockerfile 中,添加:

RUN docker-php-ext-install gd
Run Code Online (Sandbox Code Playgroud)

docker-php-ext-install您必须手动弄清楚您需要哪些依赖项,这有点令人烦恼。它们不会自动解决。因此,该命令将自行崩溃,如下所示:

configure: error: png.h not found.
Run Code Online (Sandbox Code Playgroud)

如果您查找错误,您将意识到您需要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
Run Code Online (Sandbox Code Playgroud)

docker-php-ext-install 的输出有点冗长,因此我喜欢将其输出通过管道传输到/dev/null. 仍然会打印错误和警告。

您可以通过运行图像来检查图像是否具有正确的扩展名:

docker build -t php-gd .
docker run php-gd /bin/bash -c "php -m | grep gd"
Run Code Online (Sandbox Code Playgroud)

将打印:

gd
Run Code Online (Sandbox Code Playgroud)

在 docker-compose 堆栈中相同:

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      
Run Code Online (Sandbox Code Playgroud)

两个旁注:

  1. 从您的问题来看,不清楚您是否构建了容器然后apt-get install php5-gd从中运行。如果是这样,那么只会在该容器中安装 php5-gd,并且每次重新创建它时,它都会消失。始终从Dockerfile.

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