web-dev-qa-db-ja.com

DockerでのGdのインストール

私は完全な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

このエラーの原因は何ですか?

37
evilscary

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にトラフィックがリダイレクトされます。

通常、コンテナはバックグラウンドで実行します。これを行うには、-dオプションをdocker runコマンドに追加します(ただし、テスト目的で-dを省略して、コンソールに出力を表示できます)。

コンテナをバックグラウンドで実行することにした場合は、docker logs sitename_testを使用してログを確認できます。ログを追跡(およびログの更新を参照)するには、-fオプションを使用します。

docker logs -f sitename_test

それが役に立てば幸いです。

88
lmtx

この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
2
NguyenHuuGiap

残念ながら、いくつかのphp拡張機能は他のプログラムに依存しています。 docker-php-extension-installer というプロジェクトがあり、PHP拡張機能のインストールに使用できます。必要な依存関係も存在することを確認します。

その外部スクリプトは複数のコンテナに必要なので、それを 共有スクリプト に入れて、必要なDockerfileに含めます。

スクリプト(.shared/scripts/install_php_extensions.sh)

#!/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 \
;

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

注意:この場合、正しい build context を使用してください。

1
Hirnhamster