Php 在Docker中安装GD

Php 在Docker中安装GD,php,docker,dockerfile,Php,Docker,Dockerfile,我是一个完全的码头新手,但我必须维护现有的系统。我使用的Dockerfile如下所示: FROM php:5.6-apache RUN docker-php-ext-install mysql mysqli RUN apt-get update -y && apt-get install -y sendmail RUN apt-get update && \ apt-get install -y \ zlib1g-dev RUN

我是一个完全的码头新手,但我必须维护现有的系统。我使用的Dockerfile如下所示:

FROM php:5.6-apache

RUN docker-php-ext-install mysql mysqli

RUN apt-get update -y && apt-get install -y sendmail

RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN docker-php-ext-install mbstring

RUN docker-php-ext-install zip

RUN docker-php-ext-install gd
当我运行“docker build[sitename]”时,一切似乎都正常,直到出现错误:

configure: error: png.h not found.
The command '/bin/sh -c docker-php-ext-install gd' returned a non-zero code: 1

此错误的原因是什么?

您应该将
libpng dev
包添加到
Dockerfile

FROM php:5.6-apache

RUN docker-php-ext-install mysql mysqli

RUN apt-get update -y && apt-get install -y sendmail libpng-dev

RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN docker-php-ext-install mbstring

RUN docker-php-ext-install zip

RUN docker-php-ext-install gd
然后使用
Dockerfile
转到目录并运行:

docker build-t sitename.

在我的情况下,它起了作用:

Removing intermediate container f03522715567
Successfully built 9d69212196a2
如果您有任何错误,请告诉我

编辑:

您应该看到如下内容:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sitename            latest              9d69212196a2        19 minutes ago      414 MB
<none>              <none>              b6c69576a359        25 minutes ago      412.3 MB
创建的存储库标记图像ID大小
sitename最新版本9D692196A2 19分钟前414 MB
b6c69576a359 25分钟前412.3 MB
EDIT2:

只是要仔细检查一下:

请按以下方式运行
docker build
命令:

docker build-t站点名称:1.0。

(添加
:1.0
不应该改变任何东西,我添加它只是为了在
docker images
输出中增加一行)

然后启动容器:

docker运行--name sitename\u测试-p 80:80 sitename:1.0

它应该很好用

我假设apache使用的是标准端口(80)——也许您需要对此进行调整。如果有其他服务/容器侦听端口80,则可以使容器侦听其他端口:

docker运行--name sitename\u测试-p 8080:80 sitename:1.0

这将把流量从端口8080重定向到容器“内部”的端口80

通常在后台运行容器。为此,将
-d
选项添加到
docker run
命令中(但出于测试目的,您可以省略
-d
以查看控制台中的输出)

如果您决定在后台运行容器,您可以使用
docker logs sitename\u test
检查日志。要跟踪日志(请参阅日志中的更新),请使用
-f
选项:

docker日志-f sitename\u测试


希望对您有所帮助。

Dockerfile
与Php7一起使用


不幸的是,有些php扩展与其他程序有依赖关系。有一个名为的项目,可用于安装PHP扩展。它将确保所需的依赖关系也存在

因为我需要在多个容器中使用该外部脚本,所以我将其放入其中,然后将其包含在所需的Dockerfile中

脚本(位于.shared/scripts/install\u php\u extensions.sh)

Dockerfile

# get the scripts from the build context and make sure they are executable
COPY .shared/scripts/ /tmp/scripts/
RUN chmod +x -R /tmp/scripts/

# install extensions
RUN /tmp/scripts/install_php_extensions.sh

注意:确保在这种情况下使用正确的语法。

OP的情况并非如此,但我发现对于那些使用
php:7.4-fpm-alpine
的人来说,语法有点不同

FROM php:7.4-fpm-alpine

# ... Other instructions ...

# Setup GD extension
RUN apk add --no-cache \
      freetype \
      libjpeg-turbo \
      libpng \
      freetype-dev \
      libjpeg-turbo-dev \
      libpng-dev \
    && docker-php-ext-configure gd \
      --with-freetype=/usr/include/ \
      # --with-png=/usr/include/ \ # No longer necessary as of 7.4; https://github.com/docker-library/php/pull/910#issuecomment-559383597
      --with-jpeg=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-enable gd \
    && apk del --no-cache \
      freetype-dev \
      libjpeg-turbo-dev \
      libpng-dev \
    && rm -rf /tmp/*

# ... Other instructions ...

这是Composer的Docker图像的一个问题。 因此,我们最好按照上述问题的建议,将命令:install行替换为:

composer:    
       ...
       command: install --ignore-platform-reqs
有关更多信息,请访问此链接:
这个答案太晚了,但会有所帮助

RUN apt-get update && \
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev && \
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
docker-php-ext-install gd

这似乎建立,但在这样做时,我得到了一些红色的线条出现;这些是失败的吗?请粘贴这些行。我已经完成了该生成,但没有收到任何警告/错误。此外,当我检查“docker images”时,它会显示在我运行该生成时有一个生成运行,但存储库列中没有该生成。请检查编辑的答案-注释中的格式不起作用:/Let us。您能否准确地解释需要更改哪些内容才能使其起作用?仅在此处转储代码无助于任何人从您的答案中学习。不转储代码,但以下代码修复了错误:未找到函数“imagecreatefromjpeg”<代码>运行apt get install-y libwebp dev libjpeg62 turbo dev libpng dev libxpm dev RUN docker php ext configure gd--with gd--with webp dir--with jpeg dir \--with png dir--with zlib dir--with xpm dir--with freetype dir \--启用gd native ttf RUN docker php ext install gd经过一整天的搜索,这对我很有效。谢谢@AnonymousAngelo很高兴这有帮助!:D@phaberest并非所有英雄都戴斗篷;)感谢docker php ext configure的选项已更改。现在是docker php ext配置gd——使用freetype——使用jpeg。看@BradyEmerson是对的。您需要替换上述注释中提到的
docker php ext configure
选项,然后按预期工作。
composer:    
       ...
       command: install --ignore-platform-reqs
RUN apt-get update && \
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev && \
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
docker-php-ext-install gd