dockerでintlをインストール

Dockerfileを作っていると、PHPの拡張機能をインストールする時があります。そんなときエラーがでて困ってしまうことも多いです。今回は拡張機能の一つのphp-intlをインストールしようとしたらエラーとなったのでそのメモです

エラー文

  ------
 >  RUN apt install -y intl:
0.234
0.234 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
0.234
0.236 Reading package lists...
0.954 Building dependency tree...
1.122 Reading state information...
1.129 E: Unable to locate package intl
------

build中にエラーとなります。拡張機能をどうやったらインストールできるか・・・

環境

  • PHP:php-fpm:8.2

Dockerfileのため、普段とは違うDebian系が入っているイメージになります。とりあえず以下のコマンドはやっても駄目でした

  • RUN apt install -y intl
  • RUN apt install -y php-intl
  • RUN apt install -y php8-intl
  • RUN apt install -y php8.2-intl

調べてみる

調べてみると、どうやらDockerのコマンドでもインストールできるみたいでした。

  • RUN docker-php-ext-install intl

エラー

参考サイトなどでは上記のコマンドだけでインストール出来ますとありますが、僕は何度やってもbuildエラーとなりました。

対応方法

結論としては以下の方法でインストールできるようになりました

RUN docker-php-ext-configure intl
RUN docker-php-ext-install intl

これでエラー文がでることなくインストールできるようになります。
2回目のbuildからはdocker-php-ext-configureは無くても問題ないです。

なぜこうなるのか?

調べてみると、docker-php-ext-configuredocker-php-ext-installでは違いがありました。

  • docker-php-ext-configureは設定をカスタマイズしたい時に使う
  • docker-php-ext-installは解凍してインストールをしたい時に使う

intlはカスタマイズをして行うもののため、configureを指定しないと駄目でした。configureを指定してもインストールされるわけではないので、その後にinstallを指定する必要があります。

Debian系だけしかつかえない?

このdocker-php-ext-*コマンドはもしかしたらDebian系のベースOSでしか使えないかもしれません。RedHat系のOSで試したら動きませんでした。

個人支援・寄付について

サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。

  • ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS