2017-05-21 10 views
0

を使用してPHPのためにYAMLの拡張子を追加します。https://github.com/docker-library/php/blob/76a1c5ca161f1ed6aafb2c2d26f83ec17360bc68/7.1/alpine/Dockerfileは、私は、この公式PHPドッカーの画像を使用している公式のアルパインドッカーイメージ

は今、私はそれはPHPにバンドルされていない、YAML拡張機能のサポートを追加する必要があります。 私が使用しているベースイメージはphpizeを使用しています。

私はこのアプローチをしようとしている:

FROM php:7.1.5-alpine 

# Install and enable yaml extension support to php 
RUN apk add --update yaml yaml-dev 
RUN pecl channel-update pecl.php.net 
RUN pecl install yaml-2.0.0 && docker-php-ext-enable yaml 

をしかし、私はこのエラーを取得:

running: phpize 
Configuring for: 
PHP Api Version:   20160303 
Zend Module Api No:  20160303 
Zend Extension Api No: 320160303 
Cannot find autoconf. Please check your autoconf installation and the 
$PHP_AUTOCONF environment variable. Then, rerun this script. 

ERROR: `phpize' failed 
ERROR: Service 'php_env' failed to build: The command '/bin/sh -c pecl install yaml-2.0.0 && docker-php-ext-enable yaml' returned a non-zero code: 1 

そのイメージを使用し、そのサポートを追加するための最も慣用ドッキングウィンドウの方法は何ですか?

私はそれをベースとして使うべきですか、または希望の拡張を構成可能にするためにパラメータを追加することは可能でしょうか?

答えて

3

アルパインはパッケージをインストールするためにapkを使用します。アルパインのautoconfパッケージに含まれているautoconfが見つからないことをコンパイルプロセスが訴えています。

私は、これらのコマンドを実行するようにお勧めしたい:あなたは他の非-devのライブラリをインストールする必要がある場合は、別のapk addコマンドでそれらをインストールすることができ

RUN apk add --no-cache --virtual .build-deps \ 
    g++ make autoconf yaml-dev 

RUN pecl channel-update pecl.php.net 
RUN pecl install yaml-2.0.0 && docker-php-ext-enable yaml 

RUN apk del --purge .build-deps 

。この手順は、なります:

  1. ビルドDEPSをインストールし、--no-cacheを使用すると、更新されたインデックスではなくローカルにキャッシュされた(これがない--updateの必要性やキャッシュ内のpkgを保存する)を使用していることを意味します。 --virtualはPECLとドッキングウィンドウ-PHP-EXT-有効

  2. とあなたのものを行う(彼らはコンパイル処理の後に無用だから)あなたは

  3. を後で削除することができ、すべてのそれらのパッケージのための仮想基準を作成していること

  4. 以前のビルドが

あなたがまだ不足している依存関係が発生した場合は、あなたが参照として本見ることができるのDEP削除: `pecl`を取得するにはhttps://pkgs.alpinelinux.org/packages

+1

を、読者はまた' APK php7-を追加する必要がありますがデベロッパー。 – halfer

+0

それは私のために働いていない。私はphpinfo()を実行し、 "追加の.iniファイルの解析"フィールドに値 "/usr/local/etc/php/conf.d/docker-php-ext-yaml.ini"がありますが、拡張子は有効にすることはできません。私はPHPのドキュメントからの例を試して、私はこのエラーメッセージが表示されます: "未定義関数yaml_emit()"を呼び出します。 アイデア –

+0

ええ、私は愚かだと思うが、本当に分けたい。私は自分のイメージを削除してもう一度ビルドします。今は動作しています。 イメージを削除せずに再度ビルドすると、問題の原因になることがあります。確かに、同じイメージを再構築するときには、古いビルドを使用して新しいイメージを作成します。私はドッカーと初心者の一種です、そして私はこれのように動作することを除いていませんでした、それは知っていることは非常に良いです。 あなたのソリューションに感謝します。今、完璧に動作しています! –

関連する問題