Docker容器内php.ini文件夹无法删除的问题求助
Bitnami PHP-FPM镜像php.ini构建时不可见问题的解决方法
问题场景
尝试通过Dockerfile删除Bitnami PHP-FPM容器中的/opt/bitnami/php/lib/php.ini文件,Dockerfile内容如下:
FROM bitnami/php-fpm:latest RUN rm -rf /opt/bitnami/php/lib/php.ini RUN ls /opt/bitnami/php/lib
执行构建命令:
sudo docker build --no-cache --progress=plain .
输出中看不到php.ini文件,即使去掉rm -rf步骤也一样,仿佛镜像里根本不存在这个文件。但通过docker-compose启动容器后,执行:
sudo docker exec php-fpm ls /opt/bitnami/php/lib
却能看到php.ini文件。
所用docker-compose.yml中PHP服务配置:
php: build: . container_name: php-fpm hostname: php-fpm depends_on: - mysql environment: - "ENV_SUBSTITUTION_ENABLE=true" - "PHP_MEMORY_LIMIT=512M" - "PHP_FPM_LISTEN=9000" - "PHP_SESSION_GC_MAXLIFETIME=7200" volumes: - ./projmain:/var/www/proj:rw
原因分析
Bitnami官方镜像的配置文件(包括php.ini)并非直接打包在镜像的文件系统中,而是由容器启动时的初始化脚本根据环境变量和模板生成的:
- 构建阶段的
RUN命令是在镜像层执行,此时初始化脚本还未运行,自然看不到php.ini文件; - 容器启动后,镜像的entrypoint脚本会执行配置生成逻辑,将
php.ini写入/opt/bitnami/php/lib路径,所以此时能看到文件。
解决方案
方案1:容器启动时删除文件
在docker-compose的PHP服务中修改command,先删除文件再启动PHP-FPM:
php: # 其他配置不变 command: sh -c "rm -rf /opt/bitnami/php/lib/php.ini && /opt/bitnami/scripts/php-fpm/run.sh"
方案2:挂载自定义配置覆盖(如需替换而非删除)
如果是要替换默认php.ini而非删除,可直接挂载本地自定义文件:
php: # 其他配置不变 volumes: - ./projmain:/var/www/proj:rw - ./custom/php.ini:/opt/bitnami/php/lib/php.ini:ro
方案3:自定义Entrypoint脚本
编写自定义entrypoint脚本(比如custom-entrypoint.sh):
#!/bin/sh rm -rf /opt/bitnami/php/lib/php.ini exec /opt/bitnami/scripts/php-fpm/run.sh
然后在Dockerfile中添加:
FROM bitnami/php-fpm:latest COPY custom-entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/custom-entrypoint.sh ENTRYPOINT ["custom-entrypoint.sh"]
内容的提问来源于stack exchange,提问作者Roman2903
相关产品推荐
相关产品推荐

