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

基于PHP+Apache的Dockerfile本地卷挂载不生效问题咨询

Docker挂载本地目录文件变更不生效解决方案

常见原因及对应处理方式

  • OPcache缓存导致PHP文件变更不生效
    官方php:7.3-apache镜像默认开启OPcache扩展,会将解析后的PHP脚本缓存到内存中,即使挂载目录的本地文件修改,Apache依然会读取缓存内容返回。
    解决方法:在Dockerfile中新增配置关闭OPcache(仅开发环境使用,生产环境建议开启OPcache提升性能):
FROM php:7.3-apache
# 关闭OPcache
RUN echo "opcache.enable=0" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini \
    && echo "opcache.enable_cli=0" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
EXPOSE 80/tcp

修改后重新构建镜像再启动容器即可。

  • 挂载路径异常或跨文件系统通知失效
  1. 首先确认执行docker run命令的当前工作目录为你项目的根目录,可执行docker inspect <运行的容器ID>查看Mounts字段,确认Source路径为你本地的项目目录、Destination为/var/www/html/,确认挂载操作成功。
  2. 如果你使用Windows+WSL2环境运行Docker,需要将项目文件存放在WSL2的Linux文件系统中,不要存放在Windows的/mnt/c等挂载盘内,跨文件系统的挂载会丢失文件变更通知,导致容器感知不到文件修改。
  • Apache静态文件缓存导致非PHP文件变更不生效
    如果是HTML/CSS/JS等静态文件修改不生效,是Apache默认配置了静态资源缓存规则,可在项目根目录新增.htaccess文件关闭缓存(仅开发环境使用):
<IfModule mod_expires.c>
    ExpiresActive Off
</IfModule>
<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

额外优化提示

开发环境使用本地目录挂载的场景下,Dockerfile中的COPY . /var/www/html指令完全不需要,容器启动时的挂载会直接覆盖镜像内的/var/www/html目录,保留COPY指令只会无意义增加镜像构建的时间,可直接删除。

内容的提问来源于stack exchange,提问作者Áron Pop Adorján

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:57:03