在Docker中安装GD

时间:2016-09-23 09:16:13

标签: php docker dockerfile

我是一个完整的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

此错误的原因是什么?

6 个答案:

答案 0 :(得分:74)

您应该将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

<强> EDIT2:

只是仔细检查一切:

请以这种方式运行docker build命令:

docker build -t sitename:1.0 .

(添加:1.0不应该更改任何内容,我添加它只是为了在docker 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&#34;内部&#34;容器。

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

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

docker logs -f sitename_test

希望有所帮助。

答案 1 :(得分:10)

OP并非如此,但是我发现对于使用5px的用户来说,语法有点不同

php:7.4-fpm-alpine

答案 2 :(得分:5)

这个答案为时已晚,但会有所帮助。

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

答案 3 :(得分:1)

不幸的是,某些php扩展具有对其他程序的依赖性。有一个名为docker-php-extension-installer的项目,可用于安装PHP扩展。它将确保还存在必需的依赖项。

由于我需要在多个容器中使用该外部脚本,因此将其放入a shared script中,然后将其包含在所需的Dockerfile中。

脚本(位于.shared / scripts / install_php_extensions.sh)

class drawable_lines:
    def __init__(self, ax, Y):
        self.ax = ax
        self.c = ax.get_figure().canvas
        self.y = Y

        self.line = ax.axhline(y=Y, picker=5)
        self.ax.add_line(self.line)
        self.c.draw_idle()
        self.sid = self.c.mpl_connect('pick_event', self.clickonline)

    def clickonline(self, event):
        if event.artist == self.line:
            self.follower = self.c.mpl_connect('motion_notify_event', self.followmouse)
            self.releaser = self.c.mpl_connect('button_release_event', self.release)

    def followmouse(self, event):
        self.line.set_ydata([event.ydata, event.ydata])
        self.c.draw_idle()

    def release(self, event):
        self.y = self.line.get_ydata()[0]
        self.c.mpl_disconnect(self.followmouse)
        self.c.mpl_disconnect(self.release)

Dockerfile

#!/bin/sh

# add wget
apt-get update -yqq && apt-get -f install -yyq wget

# download helper script
wget -q -O /usr/local/bin/install-php-extensions https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions \
    || (echo "Failed while downloading php extension installer!"; exit 1)

# install all required extensions
chmod uga+x /usr/local/bin/install-php-extensions && sync && install-php-extensions \
    gd \
;

警告:在这种情况下,请确保使用正确的build context

答案 4 :(得分:0)

Dockerfile与Php7合作 https://hub.docker.com/r/giapnh/php7-gd

FROM php:7-fpm

RUN docker-php-ext-install mysqli pdo pdo_mysql
RUN apt-get update -y && apt-get install -y libwebp-dev libjpeg62-turbo-dev libpng-dev libxpm-dev \
    libfreetype6-dev
RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN docker-php-ext-install mbstring

RUN apt-get install -y libzip-dev
RUN docker-php-ext-install zip

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 \
    --enable-gd-native-ttf

RUN docker-php-ext-install gd

CMD ["php-fpm"]

EXPOSE 9000

答案 5 :(得分:0)

这是Composer的Docker映像的问题。 因此,我们最好遵循上述问题的建议,并替换命令:install line,如下所示:

composer:    
       ...
       command: install --ignore-platform-reqs

有关更多信息,请单击此链接: https://github.com/nanoninja/docker-nginx-php-mysql/issues/28