如何在Docker PHP镜像中配置timezonedb扩展?手动配置未生效求助
在Docker PHP镜像中配置timezonedb扩展的正确方法
核心问题:手动修改容器的配置无法持久化且易出错
直接在运行中的Docker容器内手动安装扩展、修改php.ini的方式,会因为容器的临时性(重启后所有修改丢失)以及可能找错配置文件路径,导致配置不生效。正确的做法是通过Dockerfile构建自定义镜像来持久化配置。
方法一:用Dockerfile构建带timezonedb的PHP镜像
以官方PHP镜像为基础,利用官方提供的工具自动安装并启用扩展:
# 替换为你需要的PHP版本,比如php:8.2-apache、php:7.4-cli等 FROM php:7.4-fpm # 安装编译依赖,通过pecl安装timezonedb并启用 RUN apt-get update && apt-get install -y \ git \ build-essential \ && pecl install timezonedb \ # 官方工具自动将扩展配置添加到PHP的ini目录,无需手动修改php.ini && docker-php-ext-enable timezonedb \ # 清理缓存减小镜像体积 && apt-get clean && rm -rf /var/lib/apt/lists/*
构建镜像并运行容器:
docker build -t my-php-image . docker run -d --name my-php-container my-php-image
方法二:临时修改运行中的容器(仅用于测试,不推荐)
如果只是临时验证,按以下步骤操作:
- 进入容器:
docker exec -it <容器ID/名称> bash - 确认PHP加载的配置文件路径:
php --ini,找到Loaded Configuration File对应的文件 - 确认timezonedb扩展已正确安装:
pecl list,查看是否有timezonedb条目 - 编辑正确的php.ini文件,添加
extension=timezonedb.so - 重启PHP服务(根据镜像类型选择命令):
- FPM镜像:
service php-fpm restart - Apache镜像:
service apache2 restart
- FPM镜像:
- 验证生效:
php -m | grep timezonedb,有输出则说明扩展已加载
验证扩展是否生效
无论用哪种方式,都可以通过以下命令确认:
# 查看已加载的扩展列表 php -m | grep timezonedb # 查看扩展详细信息 php -i | grep -A 10 timezonedb
内容的提问来源于stack exchange,提问作者Mohammad Golmohammadi
相关产品推荐
相关产品推荐

