Docker部署PHP(Smarty)+SQLite3网站遇PHP代码纯文本显示问题求助
修复PHP(Smarty)+SQLite3网站Docker化配置问题
核心问题分析
- PHP代码显示纯文本:虽使用
php:apache镜像,但缺少Smarty依赖导致PHP逻辑无法正常执行,同时可能存在文件复制不完整的情况; - 未安装Smarty模板引擎:当前Dockerfile仅配置了基础PHP扩展,未引入Smarty组件;
- SQLite3数据未持久化:容器重启后数据会丢失,需配置卷挂载实现数据留存。
修复后的Dockerfile
FROM php:8.2.0-apache # 安装系统依赖及PHP扩展 RUN apt-get update && apt-get install -y \ libzip-dev unzip curl sqlite3 libsqlite3-dev \ && rm -rf /var/lib/apt/lists/* RUN docker-php-ext-install zip pdo pdo_sqlite # 安装Composer(用于管理Smarty依赖) RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # 设置工作目录 WORKDIR /var/www/html # 复制Composer配置文件并安装依赖(若项目已用Composer管理Smarty) COPY composer.json composer.lock* ./ RUN composer install --no-dev --optimize-autoloader # 复制项目所有文件(包括PHP入口、模板、数据库等) COPY . . # 设置目录权限:Smarty需要读写缓存和配置目录 RUN chown -R www-data:www-data /var/www/html \ && chmod -R 755 /var/www/html/templates/cache /var/www/html/templates/configs # 启用Apache重写模块 RUN a2enmod rewrite CMD ["apache2-foreground"]
Dockerfile修改说明
- 新增Composer安装:用于拉取Smarty依赖,若项目未使用Composer,可替换为手动下载Smarty的步骤;
- 补充权限设置:给Smarty所需的缓存、配置目录分配读写权限,避免模板渲染失败;
- 优化镜像体积:清理apt安装缓存,减少镜像大小;
- 完整复制项目文件:确保所有PHP逻辑、模板、数据库文件都同步到容器内。
修复后的compose.yaml
services: web: build: . container_name: corporate_site_web ports: - "8000:80" volumes: # 挂载本地项目目录,开发时实时同步修改(可选,生产环境可移除) - ./:/var/www/html # 挂载SQLite数据库目录,实现数据持久化(路径根据你的实际存储位置调整) - db-compose-volume:/var/www/html/data networks: - corporate_site_network networks: corporate_site_network: driver: bridge volumes: db-compose-volume:
Compose配置修改说明
- 新增本地目录挂载:开发阶段无需频繁重建镜像,本地文件修改可直接同步到容器;
- 配置数据库卷:将SQLite数据库所在目录挂载到命名卷,避免容器销毁后数据丢失;
- 保留原有网络配置:维持容器网络隔离特性。
额外注意事项
Smarty手动安装(未用Composer场景):
若项目未通过Composer管理依赖,可在Dockerfile中添加以下步骤下载Smarty:RUN curl -L https://github.com/smarty-php/smarty/archive/refs/tags/v4.3.0.tar.gz | tar xz -C /var/www/html \ && mv /var/www/html/smarty-4.3.0 /var/www/html/smarty之后在PHP代码中调整Smarty的引入路径即可。
验证PHP解析功能:
在项目根目录创建info.php,内容为<?php phpinfo(); ?>,访问localhost:8000/info.php,若能正常显示PHP信息则说明解析配置正常。Smarty模板路径检查:
确保PHP代码中Smarty的模板目录、缓存目录路径,与容器内的实际路径一致(默认对应/var/www/html/templates)。
内容的提问来源于stack exchange,提问作者user27844577
相关产品推荐
相关产品推荐

