Docker上でEC-CUBE最新版(ver4.0.2)を起動するためのイメージファイルを作成し、起動までは問題なく進められたのですが、起動後の画面で「[必須]intl拡張モジュールが有効になっていません」というメッセージが表示されており、少しだけ試行錯誤したので、その対応方法を備忘として残しておきます。
EC-CUBE上で Dockerを起動する方法については、下記の記事を全面的に参考にさせて頂きました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9RG9ja2VyJTIwZm9yJTIwTWFjJUUzJTgxJUE3JUU2JTlDJTgwJUU2JTk2JUIwJUU3JTg5JTg4RUMtQ1VCRSUyMCVFMyU4MyVBRCVFMyU4MyVCQyVFMyU4MiVBQiVFMyU4MyVBQiVFNyU5MiVCMCVFNSVBMiU4MyVFNiVBNyU4QiVFNyVBRiU4OSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9MGQ4NTMwZTAwMDM0NDRjMTc4MWRlMTEyMGYyNTBiOGM&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBuYW5haW1vV2ViJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz00NGRmMjc0NDIyZjRhOTBhNDRmNzNiOTRhYWQwZjRkZA&blend-x=142&blend-y=486&blend-mode=normal&s=5c457944890df3980e7d1a687be1f9d9)
この記事の解決方法も、上記の手順を前提としています。
対応方法
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上で起動してみるのもおすすめです。
簡単にサクッと作れますよ。
コメント