PHP:7.3.1-fpm容器中Asia/Tehran时区显示+0430异常问题
解决php:7.3.1-fpm容器中Asia/Tehran时区显示+0430的问题
问题根源
php:7.3.1-fpm对应的基础镜像(如Debian Stretch或Alpine 3.x)内置的tzdata包版本过旧,未包含伊朗在2020年取消夏令时的时区规则更新,导致Asia/Tehran仍被识别为夏令时状态(+0430),而非当前的标准时区+0330。
解决方案
以下是两种无需升级PHP版本的可行方案:
方案1:更新容器内的tzdata包
根据容器基础发行版选择对应的命令,在Dockerfile中添加以下步骤:
- Debian/Ubuntu系镜像:
# 更新tzdata包 RUN apt-get update && \ apt-get install -y --no-install-recommends tzdata && \ rm -rf /var/lib/apt/lists/* # 设置时区 ENV TZ=Asia/Tehran RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && \ echo $TZ > /etc/timezone
- Alpine系镜像:
# 更新tzdata包 RUN apk add --no-cache tzdata # 设置时区 ENV TZ=Asia/Tehran RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && \ echo $TZ > /etc/timezone
方案2:手动替换时区文件
如果容器无法联网更新包,可以从主机或其他拥有最新tzdata的环境中获取Asia/Tehran时区文件,复制到容器内:
- 从主机(需安装最新tzdata)导出时区文件:
cp /usr/share/zoneinfo/Asia/Tehran ./Asia-Tehran-tzfile
- 在Dockerfile中添加复制和配置步骤:
# 复制最新时区文件到容器 COPY ./Asia-Tehran-tzfile /usr/share/zoneinfo/Asia/Tehran # 设置系统时区 ENV TZ=Asia/Tehran RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && \ echo $TZ > /etc/timezone # 确保PHP时区同步生效 RUN echo "date.timezone = Asia/Tehran" >> /usr/local/etc/php/php.ini
验证操作
重新构建镜像并启动容器后,执行以下命令确认:
- 系统时区:
date,应显示+0330 - PHP时区:
php -r 'echo date("Y-m-d H:i:s T");',应输出包含+0330的时区标识
内容的提问来源于stack exchange,提问作者realpvz
相关产品推荐
相关产品推荐

