You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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时区文件,复制到容器内:

  1. 从主机(需安装最新tzdata)导出时区文件:
cp /usr/share/zoneinfo/Asia/Tehran ./Asia-Tehran-tzfile
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:45:06