Docker上でEC-CUBE最新版(ver4.0.2)を起動するためのイメージファイルを作成し、起動までは問題なく進められたのですが、起動後の画面で「[必須]intl拡張モジュールが有効になっていません」というメッセージが表示されており、少しだけ試行錯誤したので、その対応方法を備忘として残しておきます。
EC-CUBE上で Dockerを起動する方法については、下記の記事を全面的に参考にさせて頂きました。
この記事の解決方法も、上記の手順を前提としています。
対応方法
php:7.1-apacheのイメージを作成する際のDockerfileの最後の行に、下記を追加すればOKです。
RUN apt-get install libicu-dev -y RUN docker-php-ext-install intl
原因と解説
EC-CUBE 4系では、動作するためにintlモジュールが必須になっています。
しかし、デフォルトのphp:7.1-apacheイメージには、intlモジュールが含まれていません。
そのため、2行目の下記 コマンドを書くことで、PHPイメージを作成するタイミングで、intlモジュールを入れています。
RUN docker-php-ext-install intl
しかし、実際にはこれだけを書いて実行すると、下記のエラーメッセージが出てイメージ作成に失敗してしまいます。
どうやら、ユニコード用の国際化コンポーネントと呼ばれる、多言語化対応するためのライブラリのようなものをintlモジュールより先にインストールしなければならないようです。
dockerの場合は「libicu-dev」を入れれば良さそうだったので、1行目の下記コマンドで先に書くことで解決。
RUN apt-get install libicu-dev -y
「-y」を最後に書いている理由についてですが、「libicu-dev」のインストール時に下記のような対話が発生します。
Do you want to continue? [Y/n]
これはざっくり翻訳すると「このモジュールはxxMBぐらい容量食うけどインストール続行していいか?」という意味なのですが、Dockerイメージ作成時はターミナルからの入力を受け付けることができないようで、モジュールのインストールが勝手に中断されてしまいます。
そのため、「-y」をコマンドの最後に書いて、全ての対話に対して「y」と答えるようにすることで、モジュールのインストールを中断することなく進めることができます。
解決にあたり参考にしたサイト(個人的な備忘)
・Unicode 用の国際化コンポーネント – Oracle® Solaris 11.2 国際化対応言語環境の利用ガイド
・alpineでPHP-intlインストール時にエラーが起きる原因 | ハックノート
まとめ
上記のエラー以外は特に問題なく進められました。
EC-CUBEについてちょっと検証したいぐらいの用途なら、Docker上で起動してみるのもおすすめです。
簡単にサクッと作れますよ。
コメント