
Dockerfile を作成し、 を使用しますwordpress:php7.4-apache
。
3 つの異なる方法を個別に使用して、timezonedb 拡張機能をインストールしようとしました。
方法1。
RUN docker-php-source extract \
&& pecl bundle -d /usr/src/php/ext timezonedb \
&& docker-php-ext-configure timezonedb \
&& docker-php-ext-install -j$(nproc) timezonedb \
&& docker-php-source delete
方法2。
RUN mkdir -p /usr/local/src/pecl \
&& pecl bundle -d /usr/local/src/pecl timezonedb \
&& docker-php-ext-configure /usr/local/src/pecl/timezonedb \
&& docker-php-ext-install -j$(nproc) /usr/local/src/pecl/timezonedb \
&& rm -rf /usr/local/src/pecl
方法3。
RUN apt-get -y install gcc make autoconf libc-dev pkg-config \
&& pecl install timezonedb \
&& bash -c "echo extension=timezonedb.so > /usr/local/etc/php/conf.d/docker-php-ext-timezonedb.ini"
3 つの方法は正常に動作します。Docker コンテナをビルドした後、PHP 情報をチェックして拡張機能が適切にインストールされ、ロードされていることを確認します。
timezonedbは最新バージョンを使用します。PECLサイトバージョン です2022.7
。
確認しましたtimezonedb github ファイル、タイムゾーンは 597 個あるはずです。
しかし、timezonedb 配列を確認すると、420 個のタイムゾーンしか含まれていないことがわかります。
それで、疑問は、なぜこんなに違うのかということです。ここで何を見逃したのでしょうか?
どのような助けでも大歓迎です。
答え1
すべて問題ありません!ALL_WITH_BC
タイムゾーン グループを使用してみてください。
https://www.php.net/manual/en/class.datetimezone.php
echo 'ALL : ';
echo count(timezone_identifiers_list(DateTimeZone::ALL)); // -> result : 425
echo '<br/>';
echo 'ALL_WITH_BC : ';
echo count(timezone_identifiers_list(DateTimeZone::ALL_WITH_BC)); // -> result : 593
echo '<br/>';
答え2
基本的に、これはタグphp7.4-apache
と、おそらく当時の基盤となる OS イメージに含まれていたものの組み合わせに帰着すると思います。(イメージ内の質問では「外部」データベースを使用していると述べられているため、これは OS が提供するデータベースであると想定しています。)
ざっと見てみるとwordpress
ドッカーハブページには、php7.4-apache
リストにサポートされているタグはもうありません。
そしてこれを検索するとこのコミット対応するリポジトリでは、php 7.4 が EOL であるためサポートが削除されたことが記されています。
つまり、このようにタグ付けされたイメージは、Olsen データベースに限らず、メンテナンスされなくなったため、すべてが古くなっているようです。
この状況のセキュリティ面は、おそらく時代遅れのオルセン データベースよりも懸念すべきものだと思います。
非常に具体的な要件がない限り、あまり具体的でないタグ ( latest
、 、apache
、 など、要件に合うものなら6
何でも) を選択するのがおそらく良い 考えだと思います。また、より具体的なタグを使用しなければならない要件がある場合は、そのような具体的なタグはより一般的なタグよりも有効期間が短い可能性が高いことを念頭に置き、そのステータスを常に把握しておく必要があります。6-apache
答え3
誰かが同じケースに遭遇した場合に備えて、これが役立つことを願っています。
そこで、開発者がようやく私に連絡してきて、ようやく正しいタイムゾーンを取得できたと言ってきました。
彼は、タイムゾーンを取得するには PHP ラッパーを使用する必要があると言いました。
これにより、timezonedb のインストールが正しいことが確認されます。
@ceejayoz と @håkan-lindqvist の助力に感謝します。本当に感謝しています。このケースを解決するのにかなり時間がかかりました。