在 Docker 中安装 GD

2022-08-30 07:40:13

我是一个完全的Docker新手,但必须维护一个现有的系统。我正在使用的 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

此错误的原因是什么?


答案 1

您应该将软件包添加到您的:libpng-devDockerfile

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

编辑2:

只是为了仔细检查一切:

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

docker build -t sitename:1.0 .

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

然后启动容器:

docker run --name sitename_test -p 80:80 sitename:1.0

它应该工作得很好。

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

docker run --name sitename_test -p 8080:80 sitename:1.0

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

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

如果决定在后台运行容器,可以使用 检查日志。要遵循日志(并在日志中查看更新)使用选项:docker logs sitename_test-f

docker logs -f sitename_test

希望有所帮助。


答案 2

这不是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 ...

推荐